我们将char []设置为某些十六进制值,即
char [] test1 = {0x30,0x31,0x32,0x33,0x34,0x35};
然后我们使用
将其复制到一个字符串中string teststring(test1, sizeof(test1));
数组是否假定为空终止?或者是我们进行赋值的方式,C ++足够聪明,知道它的null终止并无论如何都附加它?
答案 0 :(得分:4)
由于您使用的是sizeof
运算符并提供了数组的长度,因此您无需添加NULL
。
您可以找到构造函数here的API。它明确地提到了这一点。
正如其他解决方案中所提到的,如果你决定创建一个wchar_t
的数组,那么你需要修改你提供的构造函数的长度参数,如下所示:
sizeof(test1) / sizeof(wchar_t)
这是因为sizeof
运算符返回目标的大小(以字节为单位),而不是元素的数量。对于使用char
的当前问题,没有此要求,因为char
的大小由C ++定义为1
,因此不需要除法。
答案 1 :(得分:2)
它不是以空值终止的。 Null对std :: string没有特殊含义。 你可以自由地做这样的事情:
#include <string>
#include <iomanip>
#include <iostream>
int main()
{
char test1 [] = {0x30, 0x31, 0, 0x33, 0, 0x35};
std::string teststring(test1, sizeof(test1));
for(size_t i = 0; i<teststring.size(); ++i)
std::cout << std::hex << std::showbase << (int)teststring[i] << ' ';
std::cout << '\n';
}
虽然,当然,如果我在此示例中使用std::string teststring(test1);
作为构造函数,结果字符串的长度将为2个字符。
答案 2 :(得分:-2)
使用此string
构造函数,您不需要添加额外的结尾0。
但是,我会添加结尾0以防万一,或者这个变量可以用在其他指向chars指针的上下文中。在这种情况下,应修改sizeof
:
string teststring(test1, sizeof(test1) - 1);