2

当我尝试使用 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++ 文档。

(按重试调试应用程序)

--------------------------------------- 中止 重试 忽略

我得到的 errno 是 2;

4

2 回答 2

5

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

一些非常基本的错误处理:

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);
}
于 2011-12-26T08:46:08.037 回答
0

我有这个错误,约翰是对的,发生的事情是我的防病毒软件损坏了我替换它们的一些文件并解决了问题。

于 2013-04-02T01:40:33.753 回答