将额外的空字符附加到宽字符串
Append extra null char to wide string
一些 Win32 API 结构需要将一个额外的空字符连接到一个字符串,如下例取自 here:
c:\temp1.txt'[=11=]'c:\temp2.txt'[=11=]''[=11=]'
对于宽字符串,将 L'\0' 附加到现有宽字符串末尾的最简单方法是什么?
以下是对我有用但似乎太麻烦的方法:
wchar_t my_string[10] = L"abc";
size_t len = wcslen(my_string);
wchar_t nullchar[1] = {'[=10=]'};
memcpy(my_string + len + 1, nullchar, sizeof(wchar_t));
在您的示例中,您可以像任何其他数组一样分配值。这里wchar_t
没什么特别的。
my_string
已经有一个null-termination,所以如果你想要双null-termination,那么就在它后面再加一个0。
wchar_t my_string[10] = L"abc";
size_t len = wcslen(my_string);
// todo: check out-of-bounds
my_string[len + 1] = 0;
或者更简单,如果它真的只是一个字符串文字,
wchar_t my_string[10] = L"abc[=11=]";
这将是 doubly-null-terminated。
假设您在 std::vector<std::wstring>
中有各种路径,您可以在循环中构建所需的格式:
std::vector<std::wstring> paths;
paths.emplace_back(L""); // This empty path will add the extra NUL
std::wstring buf(1000, 0);
for (auto p : paths) {
buf.append(p);
buf.append(1, 0);
}
wchar_t *ptr = buf.c_str(); // Now do stuff with it
假设 my_string 足够长:
my_string[wcslen(my_string)+1]='[=10=]';
终止 null 将被转换为宽字符。
(作为问题的第一条评论发布)
如果您使用 std::wstring
而不是 wchar_t[]
,您可以使用其 operator+=
附加额外的空终止符,例如:
wstring my_string = L"abc";
...
my_string += L'[=10=]';
// use my_string.c_str() as needed...
一些 Win32 API 结构需要将一个额外的空字符连接到一个字符串,如下例取自 here:
c:\temp1.txt'[=11=]'c:\temp2.txt'[=11=]''[=11=]'
对于宽字符串,将 L'\0' 附加到现有宽字符串末尾的最简单方法是什么?
以下是对我有用但似乎太麻烦的方法:
wchar_t my_string[10] = L"abc";
size_t len = wcslen(my_string);
wchar_t nullchar[1] = {'[=10=]'};
memcpy(my_string + len + 1, nullchar, sizeof(wchar_t));
在您的示例中,您可以像任何其他数组一样分配值。这里wchar_t
没什么特别的。
my_string
已经有一个null-termination,所以如果你想要双null-termination,那么就在它后面再加一个0。
wchar_t my_string[10] = L"abc";
size_t len = wcslen(my_string);
// todo: check out-of-bounds
my_string[len + 1] = 0;
或者更简单,如果它真的只是一个字符串文字,
wchar_t my_string[10] = L"abc[=11=]";
这将是 doubly-null-terminated。
假设您在 std::vector<std::wstring>
中有各种路径,您可以在循环中构建所需的格式:
std::vector<std::wstring> paths;
paths.emplace_back(L""); // This empty path will add the extra NUL
std::wstring buf(1000, 0);
for (auto p : paths) {
buf.append(p);
buf.append(1, 0);
}
wchar_t *ptr = buf.c_str(); // Now do stuff with it
假设 my_string 足够长:
my_string[wcslen(my_string)+1]='[=10=]';
终止 null 将被转换为宽字符。
(作为问题的第一条评论发布)
如果您使用 std::wstring
而不是 wchar_t[]
,您可以使用其 operator+=
附加额外的空终止符,例如:
wstring my_string = L"abc";
...
my_string += L'[=10=]';
// use my_string.c_str() as needed...