2013-05-25 2 views
0
char *headerString = strstr(line, "...\">"); 
    printf("%d", feof(site));         //all is ok 
    sscanf(headerString, "...\">%[^<]", tempQuestion.header); 
    printf("%d", feof(site));         //crash 

Я полностью озадачен, почему он падает. Я имею в виду, что sscanf ничего не делает с сайтом FILE *, почему он может упасть?(C) Странный сбой при использовании feof

EDIT: tempQuestion.header is (char *). Что еще вы хотели бы знать? Все для этой части работало хорошо. Я предполагаю, что я получаю ошибку нарушения доступа, а затем сбои в работе программы. Используя отладчик, я узнал, что после завершения sscanf сайт адрес меняется.

+2

Что такое 'tempQuestion.header', показать нам более подробную информацию. – Rohan

ответ

1

Если (фактически, я знаю, что это незаконно декларация, но для иллюстрации):

char* tempQuestion.header; 

Затем перед записью header он должен быть направлен на действительной памяти, в противном случае поведение не определено и может быть причина такого поведения наблюдалась в feof. Чтобы исправить malloc достаточную память для header перед использованием в sscanf.

В равной степени, что делать, если strstr возвращает NULL? Это будет передано в sscanf, что приведет к разыменованию его, что приведет к неопределенному поведению (снова).

Резюме:

  • обеспечения header указывает на действительной памяти
  • обеспечения strstr не возвращает NULL