为什么断言失败?

当我尝试使用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 \ Projects \ bfa \ Debug \ bfa.exe文件:f:\ dd \ vctools \ crt_bld \ self_x86 \ crt \ src \ fgets.c行:57

表达式:(str!= NULL)

有关程序如何导致断言失败的信息,请参阅有关断言的Visual C ++文档。

(按“重试”调试应用程序)

—————————中止重试忽略

我得到的错误是2;

我的猜测是文件无法打开,你仍然将它传递给fgets。 if(rd == NULL)如果它为空则不会停止执行fgets,它只打印出一条消息并继续执行。

一些非常基本的error handling:

 const char* frd = "word-list.txt"; FILE *rd=fopen(frd,"r"); if(rd==NULL) { std::cout<<"Coudn't open file"< 

我有这个错误,约翰是对的,发生的事情是我的反病毒破坏了我的一些文件,我取代了他们,问题解决了。