Почему я получаю ошибку подтверждения? - PullRequest
2 голосов
/ 26 декабря 2011

Этот код не работает, когда я пытаюсь отладить его с помощью VC2010:

char frd[32]="word-list.txt";

FILE *rd=fopen(frd,"r");
if(rd==NULL)
{
std::cout<<"Coudn't open file\t"<<frd;
exit(1);
}
char readLine[100]; 
while(fgets(readLine, 100, rd) != NULL)
{     
    readLine[strlen(readLine) - 1] = '\0'; 
    char *token = NULL; 
    token = strtok(readLine, " ,"); 
    insert(readLine);
} 

Результаты отладки в

--------------------------- Библиотека отладки Microsoft Visual C ++ -----------

Ошибка отладочного подтверждения!

Программа: ... \ Documents \ visual studio 2010 \ Проекты \ bfa \ Debug \ bfa.exe Файл: f: \ dd \ vctools \ crt_bld \ self_x86 \ crt \ src \ fgets.c Строка: 57

Выражение: (str! = NULL)

Информацию о том, как ваша программа может вызвать ошибку подтверждения, см. документацию по утверждениям в Visual C ++.

(Нажмите «Повторить» для отладки приложения)

--------------------------- Abort Retry Ignore

Ошибка, которую я получаю - 2;

Ответы [ 2 ]

5 голосов
/ 26 декабря 2011

Я предполагаю, что файл не открывается, и вы все равно передаете его в fgets. Ваш if (rd == NULL) не останавливает выполнение fgets, если он нулевой, он просто печатает сообщение и продолжает выполнение.

Некоторая базовая обработка ошибок:

const char* frd = "word-list.txt";

FILE *rd=fopen(frd,"r");
if(rd==NULL) {
    std::cout<<"Coudn't open file"<<endl;
    return 1;
}

char readLine[100]; 
while(fgets(readLine, 100, rd) != NULL)
{     
    readLine[strlen(readLine) - 1] = '\0'; 
    char *token = NULL; 
    token = strtok(readLine, " ,"); 
    insert(readLine);
}
0 голосов
/ 02 апреля 2013

У меня была эта ошибка, и Джон прав, что случилось, если мой Антивирус повредил некоторые файлы, которые я заменил, и проблема решена.

...