Как я могу искать в буфере?С - PullRequest
1 голос
/ 13 февраля 2011

У меня есть буфер для чтения текста из файла.Я зацикливаюсь на этом так, чтобы подсчитать строки:

    while(fgets(buf, 1024, fp) != NULL){

        for(counter = strtok(buf,"\n"); counter; counter=strtok(0,"\n")){               
            threads++;
        }  
    }

    printf("NUMBER OF THREADS: %i", threads);

, а затем снова зацикливаюсь на нем, чтобы проанализировать каждую строку и запустить поток с параметрами, проанализированными в этой строке.

Когда я запускаю это, оно завершается, потому что следующая строка:

while(fgets(buf, 1024, fp) != NULL){
 ....
}

, и я полагаю, это потому, что fgets просматривает конец буфера.

Могу ли я вернуться к началу буфера?

Ответы [ 4 ]

1 голос
/ 13 февраля 2011

использование rewind(fp); или fseek(fp, 0, SEEK_SET);

fseek считается лучшей практикой, так как возвращает код состояния.

1 голос
/ 13 февраля 2011

Во-первых, вы не должны использовать strtok , поскольку его нельзя чередовать даже без потоков, а с потоками вы просто напрашиваетесь на неприятности. Похоже, вы где-то увеличиваете свою буферную переменную. Просто сохраните исходную переменную буфера и измените копию, и тогда вы получите золотую медаль.

0 голосов
/ 13 февраля 2011

Обратите внимание, что fgets() будет читать по одной строке за раз, поэтому в строке, которую она возвращает, будет не более одной новой строки.

Обратите внимание, что strtok() изменяет сканируемую строку, помещая NUL-символы в исходную строку в конце каждого токена.

Любой из них или оба могут повлиять на вашу логику.

0 голосов
/ 13 февраля 2011

сохраните другой указатель, который указывает только на начало буфера (возможно, char * begin), затем повторно инициализируйте fp после первого цикла while.это будет эффективно "искать" назад к началу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...