C++中使用_wfopen函数出现C4996错误

3

我有4个头文件,它们都使用_wfopen()函数打开txt文件中的数据,就像下面这样:

FILE* file = _wfopen(L"data.txt",L"r,ccs=utf-8");

VC++给我一个C4996错误,但只有一个头文件中有此错误,另外三个头文件没有任何错误。我该如何解决这个问题?更新:我的教授给了我这段代码。我编译它时只有C4996警告。由于我需要重复使用它,我创建了一个新项目并将他的所有代码复制到新项目中,然后就出现了C4996错误。


C4996 应该是一个警告,如果你知道自己在做什么,通常是无害的。使用 #pragma warning (disable: 4996) 来消除它(用 pragma warning (push)/pragma warning (pop) 包围)。 - Alexandre C.
实际上,这不是我的代码。我的教授把它作为C#项目的一个组件给了我。希望他的代码是正确的。 - Husky
1个回答

2

通过简单的网络搜索可以得知,您正在使用一个已过时的函数,因此出现了错误C4996。正如示例所示,您应该使用函数_wfopen_s。

...
// Create an the xml file in text and Unicode encoding mode.
if ((fileHandle = _wfopen( L"_wfopen_test.xml",L"wt+,ccs=UNICODE")) == NULL) // C4996
// Note: _wfopen is deprecated; consider using _wfopen_s instead
{
    wprintf(L"_wfopen failed!\n");
    return(0);
}
...

你之所以在四次调用中只看到了一次错误提示,是因为编译器会抑制重复的错误提示。
参考文献:http://msdn.microsoft.com/en-us/library/yeby3zcb.aspx

我使用像Alexandre C上面写的那样的#pragma来禁用头文件中的警告,而且其他头文件中也没有错误。如果编译器抑制了错误,那么其他头文件中应该会有错误。 - Husky
既然你告诉编译器不要警告你关于这个过时的问题,我猜它就不会了,因为它确实没有警告。 - Rubens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接