微软_stprintf警告

aki*_*kif 8 c++ printf visual-c++

为什么我收到以下代码的以下警告:)

码:

_stprintf(m_szFileNamePath,_T("%s"),strFileName);
Run Code Online (Sandbox Code Playgroud)

警告C4996:'_ swprintf':swprintf已更改为符合ISO C标准,添加了额外的字符计数参数.要使用传统的Microsoft swprintf,请设置_CRT_NON_CONFORMING_SWPRINTFS.

我知道_strprintf是一个宏,如果定义_UNICODE将评估为_swprintf,否则它将是sprintf.

现在这是什么_swprintf.有一个函数swprintf,但为什么_stprintf评估为_swprintf而不是swprintf.

b/w _xxx和xxx有什么区别?

编辑:

好的,_stprintf的UNICODE版本有两个定义,其中一个包含在内?

tchar.h或strsafe.h中的那个?

sus*_*att 5

http://msdn.microsoft.com/en-us/library/ybk95axf%28VS.80%29.aspx

swprintf是sprintf的宽字符版本; swprintf的指针参数是宽字符串.swprintf中的编码错误检测可能与sprintf中的不同.除了swprintf将输出写入字符串而不是FILE类型的目标之外,swprintf和fwprintf的行为相同,并且swprintf要求count参数指定要写入的最大字符数.带有_l后缀的这些函数的版本是相同的,除了它们使用传入的locale参数而不是当前线程区域设置.

在Visual C++ 2005中,swprintf符合ISO C标准,该标准需要第二个参数count,类型为size_t.要强制执行旧的非标准行为,请定义_CRT_NON_CONFORMING_SWPRINTFS.在将来的版本中,可能会删除旧行为,因此应更改代码以使用新的符合性行为.

  • 警告不是解释了吗?因为他们改变了行为.人们通常喜欢知道代码何时没有达到预期效果.;) (3认同)