对于使用/不使用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。)

07-24 09:46
查看更多