如何解决“调试断言失败!表达式file_name!= nullptr'错误?

时间:2018-12-29 13:51:25

标签: c visual-c++

#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
FILE *source_fp, *content_fp;
int ch;
if(!(source_fp=fopen(argv[1],"wb")))
{
    printf("can't open file\n");
    return 0;
}

for(int i = 2 ; i < argc ; i++)
{
    if(!(content_fp=fopen(argv[i],"r")))
        printf("can't find file%s\n", argv[i]);
    else
    {
        while(ch = fgetc(source_fp))
        {
            fputc(ch,source_fp);
        }
        fclose(content_fp);
    } 
}
fclose(source_fp);
} 

运行该程序时,我收到以下错误消息:

Debug Assertion Failed!

Program: ...ments\Visual Studio 2015\Projects\Project9\Debug\Project9.exe File: minkernel\crts\ucrt\src\appcrt\stdio\fopen.cpp Line: 30

Expression: file_name != nullptr

For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

您的程序会在所有地方进行所有必要的检查 ...,除了您的第一个fopen。如果argc1(如果您只是运行程序),则传递给fopen的值将是NULL,而不是指向有效字符串的指针。 (如果argc0(可能的话,甚至不会是NULL,而是会导致未定义的行为。)

要解决此问题,请更改:

if(!(source_fp=fopen(argv[1],"wb")))
{
    printf("can't open file\n");
    return 0;
}

收件人:

if (argc < 2 || !(source_fp = fopen(argv[1], "wb")))
{
    printf("can't open file\n");
    return 0;
}

您知道,编译器给您的错误有点荒谬。如果您要使用Windows,请使用Pelles C之类的不错的编译器。它会告诉您什么是 actual 错误。

此外,按照惯例,如果出现问题,我们将返回0以外的其他值;通常为1