Jus*_* R. 7 c++ string wstring c++11
我输入的字符串只包含数字(只是简单的拉丁文字符串,0-9,所以例如"0123"),存储为std :: wstring,我需要每个字符串作为char*.这对我来说最好的方法是什么?这是我最初的做法:
void type::convertWStringToCharPtr(_In_ std::wstring input, _Out_ char * outputString)
{
outputString = new char[outputSize];
size_t charsConverted = 0;
const wchar_t * inputW = input.c_str();
wcstombs_s(&charsConverted, outputString, sizeof(outputString), inputW, input.length());
}
Run Code Online (Sandbox Code Playgroud)
编辑:下面的代码工作.谢谢大家!
void type::convertWStringToCharPtr(_In_ std::wstring input, _Out_ char * outputString)
{
size_t outputSize = input.length() + 1; // +1 for null terminator
outputString = new char[outputSize];
size_t charsConverted = 0;
const wchar_t * inputW = input.c_str();
wcstombs_s(&charsConverted, outputString, outputSize, inputW, input.length());
}
Run Code Online (Sandbox Code Playgroud)
Nem*_*ric 10
您没有为缓冲区分配足够的内存:
char * outputString = new char[input.length()];
Run Code Online (Sandbox Code Playgroud)
应该
char * outputString = new char[input.length() + 1];
Run Code Online (Sandbox Code Playgroud)
因为终止NUL字符.
哦,还有,根据pm100的评论:sizeof(outputString)给你指针的大小.您应该使用input.length() + 1,因为这是缓冲区的大小.
您的代码中存在一些错误.首先,您没有在目标缓冲区中为NULL字符分配足够的空间.您必须至少input.length() + 1为函数分配字符才能成功.
其次,您没有将输出缓冲区的正确大小传递给函数.sizeof(outputString)返回outputString自身的大小a char *,而不是该指针指向的字节数.
所以你的函数应该是这样的:
void CoverageTileManager::convertWStringToCharPtr(_In_ std::wstring input, _Out_ char * outputString)
{
size_t outputSize = input.length() + 1;
outputString = new char[outputSize];
size_t charsConverted = 0;
wcstombs_s(&charsConverted, outputString, outputSize, input.c_str(), input.length());
// TODO verify charsConverted = outputSize
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12348 次 |
| 最近记录: |