cpp中的mbstowcs_s有什么问题

问题描述 投票:0回答:1

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)'
c++ winapi wchar-t wstring
1个回答
0
投票

需要 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));
}
© www.soinside.com 2019 - 2024. All rights reserved.