将额外的空字符追加到宽字符串

问题描述

某些Win32 API结构要求将一个额外的空字符连接到字符串,如以下示例中摘自here

c:\ temp1.txt'\ 0'c:\ temp2.​​txt'\ 0''\ 0'

对于宽字符串,将L'\ 0'附加到现有宽字符串末尾的最简单方法是什么?

这是对我有用的东西,但似乎太麻烦了:

wchar_t my_string[10] = L"abc";
size_t len = wcslen(my_string);
wchar_t nullchar[1] = {'\0'};
memcpy(my_string + len + 1,nullchar,sizeof(wchar_t));

解决方法

在您的示例中,您可以像分配其他数组一样分配值。这里wchar_t没什么特别的。

my_string已经有一个空终止符,因此,如果要双重空终止符,只需在其后添加另一个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\0";

这将是双空终止。

,

假设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]='\0';

终止的null将被转换为宽字符。

(发布为对该问题的第一条评论)

,

如果您使用std::wstring而不是wchar_t[],则可以使用其operator+=附加额外的空终止符,例如:

wstring my_string = L"abc";
...
my_string += L'\0';
// use my_string.c_str() as needed...

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...