C++ VS 2019 stricmp和_stricmp都会导致编译器错误
源代码本身并没有什么问题。这是编译器对它的反应。下面是一个麻烦的片段:C++ VS 2019 stricmp和_stricmp都会导致编译器错误,c++,c++14,case,C++,C++14,Case,源代码本身并没有什么问题。这是编译器对它的反应。下面是一个麻烦的片段: int XtnUtil::IsExtension(const char * filename, const char * xtn) { char* fx = FindExtension(filename); // Get a pointer to the filename extension if (!fx) return 0; // Ba
int XtnUtil::IsExtension(const char * filename, const char * xtn)
{
char* fx = FindExtension(filename); // Get a pointer to the filename extension
if (!fx) return 0; // Bail out if it's not there
if (xtn[0] == '.') xtn++; // Make sure we're looking at the alpha part
return (stricmp(fx, xtn) ? 0 : 1); // TRUE if they're equal
}
我还使用了\u stricmp
而不是stricmp
。在任何一种情况下,编译器都会给我一条特别没有信息的消息:
它似乎在说“不要使用_stricmp,而是使用_stricmp”。我尝试了带下划线和不带下划线的方法,还尝试了POSIX等效方法,strcasecmp()
,但Visual Studio似乎根本不知道该函数。
目前,我已经通过编写自己的名为
mystricmp()
的函数克服了这个问题,这有点令人讨厌,但似乎可以工作。现在我最感兴趣的是为什么编译器给了我这么一条时髦的消息,如果我必须手工编写的函数不是琐碎的,我能做些什么呢?请不要使用文本图片!这使得搜索错误消息变得更加困难,您应该首先执行此操作。此外,您应该提取并提供一个,而不是一个有大量缺失上下文的代码段。在错误列表选项卡附近,您应该找到输出选项卡。它包含纯文本形式的完整且未加修饰的错误消息。这不仅可以轻松地粘贴到堆栈溢出问题中,而且完整的错误消息中还遗漏了错误列表的详细信息。通常,这些额外的细节会使情况大为恶化。FindExtension是否会将char*指针返回到const char*缓冲区?这是不安全的编码。添加编译定义\u CRT\u nonsdc\u NO\u警告
,并正常使用stricmp
。