C 如何修复';调试断言失败!表达式文件\u名称!=nullptr';错误?

C 如何修复';调试断言失败!表达式文件\u名称!=nullptr';错误?,c,visual-c++,C,Visual C++,如何解决此问题?您的程序会在任何地方进行所有必要的检查。。。除了您的第一个fopen。如果argc是1,如果您只是运行程序,则传递给fopen的值将是NULL,而不是指向有效字符串的指针。(如果argc是0,这是可能的,它甚至不会是NULL,而是会导致未定义的行为。) 要解决此问题,请更改: Debug Assertion Failed! Program: ...ments\Visual Studio 2015\Projects\Project9\Debug\Project9.exe File

如何解决此问题?

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

要解决此问题,请更改:

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)
致:

if(argc<2 | |!(source_fp=fopen(argv[1],“wb”))
{
printf(“无法打开文件\n”);
返回0;
}

正如你所知,你的编译器给你的错误有点荒谬。如果您必须使用Windows,请使用像样的编译器,如。它会告诉你实际的错误是什么


此外,按照惯例,如果出现问题,我们返回的不是
0
;通常
1

C和
文件名=nullptr
?必须是MSVC。您没有检查
argv[1]
是否为非空。您传递了多少命令行参数,您是否向程序传递了正确的参数?您没有检查
argc
是否至少为2(即,您没有检查
argv[1]
是否有效)。我认为这可能是问题所在;检查是否
argc>2
,如果没有,请退出,然后再尝试打开第一个文件。@nicomp程序没有第30行。这是微软头文件中的第30行,或者别的什么。MSVC帮不了什么忙。哈!我不知道
argc
也可以是零。我原以为总是
>=1
。我猜你每天都会学到新东西:-)请注意,并不是编译器给出了错误。这是运行时。在调试运行时库中具有断言是有效的。然后它提到内部使用变量的名称(
file\u name
)也是正确的。我想知道您的Pelles是否做得更好。@PaulOgilvie它在调试模式下为您提供堆栈跟踪,而不仅仅是说“有错误”。更重要的是,IDE将直接指向程序中有问题的行,而不是库中,因为它会自动爬升堆栈跟踪,直到找到有用的东西。当然,这也是VC在调试模式下所做的:查看堆栈,查看出错的行,查看程序中的错误,如果您愿意的话(或者只需单击堆栈上的函数即可查看程序中调用错误函数的位置)。@Spikatrix不必为零。如果
argc==1
,则
argv[1]
中仍然没有字符串,但有一个
NULL
指针。
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)
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;
}