結果としてワイド文字の複数文字列を返すwindows-apiを使用しています。結果は以下と同じです。
L"apple\0banana\0orange\0\0"
この構造をバッファにコピーするための標準機能または優れたパフォーマンスソリューションはありますか?
copy_wide_char_multi_string(dst, src); // dst and src are wchar_t arrays
私はワイド文字列を扱うのに苦労したことがないので、これをガイドラインと考えてください。
次のようなアルゴリズムを実装できます。
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を使用できます
元の配列のサイズをすでに知っているようですwchar_t clonned
。同じサイズの別の配列を作成して、単に使用してください。std::copy
std::copy(original, original+size, clonned)