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中的那个?
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.在将来的版本中,可能会删除旧行为,因此应更改代码以使用新的符合性行为.