对于使用/不使用wcs / _w / _mbs前缀定义的函数的区别,我有些困惑。
例如:
fopen(),_ wfopen()
在msdn上给出:
fopen函数打开文件名指定的文件。
_wfopen是fopen的宽字符版本; _wfopen的参数是宽字符字符串。否则,_wfopen和fopen的行为
同样。
我只是怀疑是否与添加“ _w”前缀相关的窗口是否与平台相关。
strcpy(),wcscpy(),_ mbscpy()
在msdn上给出:
wcscpy和_mbscpy分别是strcpy的宽字符和多字节字符版本。
同样,是否添加“ wcs”或“ _mbs”是否取决于平台是个问题。
编辑:
WideCharToMultiByte function是否也取决于平台?
WideCharToMultiByte不是C运行时函数,它是Windows
API,因此取决于平台
同样,wcstombs_s function是否也依赖于平台?
它是非标准的,但已在C11附录K中进行了标准化。
最佳答案
像wcs*
这样的wcscpy
函数是C标准库的一部分。 _wfopen
函数和其他_w*
函数是扩展,像_mbscpy
这样的多字节字符串函数也是如此。
在大多数情况下,具有领先的下划线的Visual C ++ C运行时(CRT)函数是扩展。没有下划线的函数是C标准库的一部分。
有两个主要例外,其中扩展名可能没有前划线:
有几个扩展函数(使用下划线前缀声明)具有无前缀别名,以实现向后源兼容性。这些别名已被弃用,如果尝试使用它们,则会收到可抑制的弃用警告(C4996)。
有些C标准库函数有_s
后缀的安全替代函数,例如scanf_s
。这些是默认声明的,但是可以通过将宏__STDC_WANT_SECURE_LIB__
定义为值0来抑制它们的声明。
(这些功能实际上已添加到可选附件K中的C11中,
但请注意,指定的内容之间存在一些差异
C标准中的内容以及Visual C ++所实现的内容。的
差异归因于a historicalaccident。)