分配一个const char []你需要输入一个空项

时间:2010-09-16 18:41:54

标签: c++ arrays memory

我们将char []设置为某些十六进制值,即

char [] test1 = {0x30,0x31,0x32,0x33,0x34,0x35};

然后我们使用

将其复制到一个字符串中
string teststring(test1, sizeof(test1));

数组是否假定为空终止?或者是我们进行赋值的方式,C ++足够聪明,知道它的null终止并无论如何都附加它?

3 个答案:

答案 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);