我正在编写一个应该从文件中读取某些级别数据的应用程序。当我运行代码(包括fopen()和fclose())超过几百次时,我收到了错误消息(我知道这意味着它无法打开文件):
Debug Assertaion失败! 程序: d:\ blahblah file:f:\ dd \ vctools \ crt \ crtwin32 \ stdio \ fgets.c 行:57 表达式:(string!= NULL)
你能帮助我理解为什么它会在三个以上的时间之后破裂吗?
Func_Main(char * filePath, ...){
for(int i=0;i<1000;i++){
Func_1(filePath);
....
}
....
}
Func_1(char* filepath){
char buffer[1024];
FILE * file= NULL;
file = fopen(filepath, "r");
while(fgets(buffer, sizeof(buffer), file)){
\\ do something
}
fclose(file);
}
答案 0 :(得分:1)
您应该检查QGroupBox
的返回值。如果打开文件失败,它将返回空指针。
它会失败,因为fopen
是一个转义字符,在文件名字符串中使用\
。
答案 1 :(得分:1)
我看到的问题:
您永远不会使用传递给Func_1
的参数。您改用硬编码路径。
硬编码路径有错误。您没有逃避硬编码路径中的反斜杠。它应该是:
file = fopen("c:\\blahblah.txt", "r");
^^
您没有检查fopen
是否成功。你假设它是成功的。使用:
file = fopen("c:\\blahblah.txt", "r");
if ( file == NULL )
{
// Deal with the error.
perror("Unable to open the file");
}
在OP编辑问题后更新
前两点可以忽略。最后一点仍需要考虑。
file = fopen(filepath, "r");
if ( file == NULL )
{
// Deal with the error.
perror("Unable to open the file");
}