Я использую Debian и написал veeeery простой файл программы синтаксического анализа в C. Файл Я хочу открыть длиной около 32k строк, со строгим форматом:файла дескриптора исчезающей/аннулируя
number,number\n
number,number\n
and so on ...
Мой код :
int main(int argc, char* argv[])
{
char data = 0;
int addr = 0;
char buf[50] = {0};
FILE* myfile = fopen("eelocdump.txt", "r");
if(myfile == NULL)
{
printf("File open error\n");
return 1;
}
while (fgets(buf, 50, myfile) != NULL)
{
sscanf(buf, "%5d,%3d\n", &addr, &data);
printf("%d,%d\n", addr, data);
}
fclose(myfile);
return 0;
}
Для некоторых нечетных причин я не понимаю, мой код читает первую строку файла, записывает его, то ошибку сегментации. Примерно через час, потраченный на это, я узнал, что вызов sscanf заставил файловый дескриптор быть установленным в NULL.
Я нашел «исправить», что я едва осмеливаюсь назвать так:
while (fgets(buf, 50, myfile) != NULL)
{
sscanf(buf, "%5d,%3d\n", &addr, &data);
printf("%d,%d\n", addr, data);
myfile = myfile;
}
Добавление этого очевидное утверждение делает мой код работы, выписывая все 32k линии. Это почти удовлетворяет, так как это ничего не меняет. (а также не должно влиять на файловый дескриптор)
Не могли бы вы помочь мне решить эту проблему правильно? Мне не очень нравится называть это «magic».
Заранее благодарен,
'char data = 0;' -> 'int data = 0;' потому что '% 3d' для int. – BLUEPIXY
Я тестировал gcc и отлично работает ('gcc (Ubuntu 4.8.4-2ubuntu1 ~ 14.04.1) 4.8.4') – BlackBear
скомпилировать его с' -Wall' '-Wextra' gcc должен предупредить о неправильном использовании' scanf 'и' printf' – fghj