为什么我断言失败?

时间:2011-12-26 08:40:56

标签: c fgets assertion

当我尝试使用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 ++调试库-----------

     

Debug Assertion失败!

     

程序:... \ 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;

2 个答案:

答案 0 :(得分:5)

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

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

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);
}

答案 1 :(得分:0)

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