1. ホーム
  2. c++

[解決済み] wcstombs_s を使って std::wsting を char* に変換する。

2022-02-19 08:24:48

質問

数字だけを含む入力文字列があり、std::wstring として保存されています。これを行うための最良の方法は何でしょうか?これは私の最初のアプローチです。

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());
}

EDIT: 下のコードは動作します。皆さん、ありがとうございます。

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());
}

解決方法は?

バッファに十分なメモリが割り当てられていません。

char * outputString = new char[input.length()];

とする必要があります。

char * outputString = new char[input.length() + 1];

終端NUL文字があるため。

あ、あと、この通り pm100 のコメントです。 sizeof(outputString) はポインタのサイズを与えています。そのため input.length() + 1 これはバッファのサイズです。