Windows 的
mbstowcs_s
功能究竟出了什么问题?
在阅读微软网站上的文档时,我可以清楚地看到这个函数只需要4个参数。另外,当我转到 IDE 中的函数声明时,我得到以下信息:
errno_t mbstowcs_s(
_Out_opt_ size_t*, _PtNumOfCharConverted,
_Post_z_ wchar_t, _Dest,
_In_z_ char const*, _Source,
_In_ size_t, _MaxCount
)
但是,当我只传递 4 个参数时,它告诉我:
错误(活动)E0304 没有重载函数“mbstowcs_s”的实例与参数列表匹配
放置
_Dest
后,我必须放置另一个等于分配内存量的参数。
我实际上不知道这个标题和文档有什么问题,以及它在这种情况下如何工作。
示例:
#include <stdlib.h>
#include <Windows.h>
int main()
{
const char* line = "12345";
size_t line_length = 6;
wchar_t* wchar_name_temp = new wchar_t[line_length];
size_t outSize;
mbstowcs_s(&outSize, wchar_name_temp, line, strlen(line));
}
输出:
<source>(9): error C2660: 'mbstowcs_s': function does not take 4 arguments
C:/WinSdk/Include/10.0.18362.0/ucrt\stdlib.h(911): note: see declaration of 'mbstowcs_s'
C:/WinSdk/Include/10.0.18362.0/ucrt\stdlib.h(919): note: could be 'errno_t mbstowcs_s(size_t *,wchar_t (&)[_Size],const char *,size_t) throw()'
<source>(9): note: 'errno_t mbstowcs_s(size_t *,wchar_t (&)[_Size],const char *,size_t) throw()': could not deduce template argument for 'wchar_t (&)[_Size]' from 'wchar_t *'
<source>(9): note: while trying to match the argument list '(size_t *, wchar_t *, const char *, size_t)'
需要 4 个参数的重载需要一个数组,而不是指针。如果你想传递一个指针,你应该选择一个也传递大小的重载。
这将适用于 C++ 重载:
#include <stdlib.h>
#include <Windows.h>
int main()
{
const char* line = "12345";
const size_t line_length = 6;
wchar_t wchar_name_temp [line_length]; //array, not pointer
size_t outSize;
mbstowcs_s(&outSize, wchar_name_temp, line, strlen(line));
}
这适用于 C 重载:
#include <stdlib.h>
#include <Windows.h>
int main()
{
const char* line = "12345";
size_t line_length = 6;
wchar_t* wchar_name_temp = new wchar_t[line_length]; //can be array or pointer, both are good
size_t outSize;
mbstowcs_s(&outSize, wchar_name_temp, line_length, line, strlen(line));
}