Ошибка чтения из текстового файла: странные последовательности '\ x01' '\ 0' '\ 0' '0' - PullRequest
1 голос
/ 24 февраля 2012

Я читаю простой текст из файла - построчно, со следующей функцией:

int readline(FILE *in, char * buf) {
char c;
buf[0]='\0';
for (int i=0; i<BUFSIZ-1; i++) {
    fread(&c,1,1,in);
    if (ferror(in)) return 1; 
    if (feof(in)) break;
    buf[i]=c; 
    if (c=='\n') break;
    }
    if (buf[BUFSIZ-1]!='\0') return 1;
    return 0;
}

Он правильно читает 28816 символов, и затем начинается проблема. Вместо чтения следующих четырех символов:

' ' 'f' 'o' 'r'

читает странную вещь:

'\x01' '\0' '\0' '\0'

После этого он все правильно читает до 33080 символов. Вместо правильного чтения следующих 12 символов, он читает три последовательности:

'\x01' '\0' '\0' '\0' '\x01' '\0' '\0' '\0' '\x01' '\0' '\0' '\0'

Затем он снова все читает правильно, до определенного момента.

При возникновении этой проблемы не было ни условия (ferror (in)), ни (feof (in)) true.

Есть ли у вас какие-либо идеи о причине этой проблемы?

1 Ответ

1 голос
/ 25 февраля 2012

Это не похоже на случайные данные - это последовательность байтов для целочисленного значения 1 (предполагается, что процессор x86 или аналогичный).

Я бы ожидал одну из двух ситуаций:

1) вы записываете конец буфера, а что-то еще использует ту же память

2) где-то еще в вашей программе вы записываете конец другого массива в память, используемую буфером.

Из комментариев я вижу, что вы отлаживали его, по-видимому, исключая оба варианта. Интересно, была ли отключена оптимизация при отладке? В прошлом у меня был сложный опыт отладки оптимизированного двоичного файла.

...