Чтение строки из файла в C - PullRequest
3 голосов
/ 15 ноября 2011

У меня есть файл с несколькими строками, каждая строка в отдельной строке. Все строки имеют длину 32 символа (т.е. 33 с символом '\ n' в конце).

Я пытаюсь прочитать все строки. Сейчас я просто хочу прочитать их, а не хранить их следующим образом:

char line[32];
while (!feof(fp)) {
    fgets(line, 32, fp);
}
printf("%s", line);

Это печатает ноль. Почему не работает?

Кроме того, я пытаюсь сохранить нулевой терминатор в конце каждой прочитанной строки. Я изменил массив line на длину 33, но как мне сделать так, чтобы, если найден '\n', заменить его на \0 и сохранить это?

Ответы [ 3 ]

4 голосов
/ 15 ноября 2011

Ваш код не работает, потому что вы выделяете место только для строк из 30 символов плюс символ новой строки и нулевой терминатор, а также потому, что вы печатаете только одну строку после того, как feof() вернет true.

Кроме того, feof() возвращает значение true только после , которое вы пытались и не смогли прочитать после конца файла. Это означает, что while (!feof(fp)), как правило, неверно - вы должны просто читать, пока функция чтения не выйдет из строя - в этой точке вы можете использовать feof() / ferror(), чтобы различать конец файла и другие типы неудач (если нужно). Итак, ваш код может выглядеть так:

char line[34];

while (fgets(line, 34, fp) != NULL) {
    printf("%s", line);
}

Если вы хотите найти первый '\n' символ в line и заменить его на '\0', вы можете использовать strchr() из <string.h>:

char *p;

p = strchr(line, '\n');
if (p != NULL)
    *p = '\0';
1 голос
/ 15 ноября 2011

Вот базовый подход:

// create an line array of length 33 (32 characters plus space for the terminating \0)
char line[33];
// read the lines from the file
while (!feof(fp)) {
    // put the first 32 characters of the line into 'line'
    fgets(line, 32, fp);
    // put a '\0' at the end to terminate the string
    line[32] = '\0';
    // print the result
    printf("%s\n", line);
}
0 голосов
/ 15 ноября 2011

Это выглядит примерно так:

char str[33]; //Remember the NULL terminator
while(!feof(fp)) {
  fgets(str, 33, fp);
  printf("%s\n",str);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...