0

結果としてワイド文字の複数文字列を返すwindows-apiを使用しています。結果は以下と同じです。

L"apple\0banana\0orange\0\0"

この構造をバッファにコピーするための標準機能または優れたパフォーマンスソリューションはありますか?

copy_wide_char_multi_string(dst, src); // dst and src are wchar_t arrays
4

2 に答える 2

2

私はワイド文字列を扱うのに苦労したことがないので、これをガイドラインと考えてください。

次のようなアルゴリズムを実装できます。

wchar_t * wide_string = L"something\0something else\0herp\0derp\0\0";
int size = 0;

int i = wcslen(wide_string + size);     // length of wide string
size += i + 1;                          // length of wide string inc. null terminator
while (true)
{
    int i = wcslen(wide_string + size); // length of wide string
    size += i + 1;                      // length of wide string inc. null terminator
    if (i == 0) break;                  // if length was 0 (2 nulls in a row) break
}
++size;                                 // count final null as part of size

これにより、バッファ内のデータのサイズがわかります。それができたら、wmemcpyを使用できます

于 2012-08-19T13:00:00.147 に答える
0

元の配列のサイズをすでに知っているようですwchar_t clonned。同じサイズの別の配列を作成して、単に使用してください。std::copy

std::copy(original, original+size, clonned)
于 2012-08-19T12:54:40.577 に答える