如何初始化char数组?

时间:2010-06-28 17:03:30

标签: c++ visual-c++

char * msg = new char[65546];

想要将所有这些初始化为0。在C ++中执行此操作的最佳方法是什么?

8 个答案:

答案 0 :(得分:58)

char * msg = new char[65546]();

它被称为值初始化,并在C ++ 03中引入。如果您碰巧发现自己陷入了前十年,那么您需要使用std::fill()(或memset()如果您想假装它是C)。

请注意,这不适用于零以外的任何值。我认为C ++ 0x会提供一种方法来做到这一点,但我有点落后于时代,所以我不能对此发表评论。

更新:似乎我对语言过去和未来的反思并不完全准确;请参阅更正的评论。

答案 1 :(得分:16)

“大多数C ++”的方法是使用std::fill

std::fill(msg, msg + 65546, 0);

答案 2 :(得分:15)

如果没有其他正当理由,我可能会使用:

std::vector<char> msg(65546, '\0');

答案 3 :(得分:9)

  

最好的方法是什么?   C ++?

因为你这样问:

std::string msg(65546, 0); // all characters will be set to 0

或者:

std::vector<char> msg(65546); // all characters will be initialized to 0

如果您正在使用接受char *或const char *的C函数,那么您可以这样做:

some_c_function(&msg[0]);

如果它接受const char *或data(),你也可以在std :: string上使用c_str()方法。

这种方法的好处在于,您可以使用动态分配的char缓冲区执行所有操作,但更安全,灵活,有时甚至更高效(避免需要线性重新计算字符串长度,例如)。最重要的是,您不必释放手动分配的内存,因为析构函数将为您执行此操作。

答案 4 :(得分:6)

此方法使用'C'memset函数,速度非常快(避免使用char-by-char循环)。

const uint size = 65546;
char* msg = new char[size];
memset(reinterpret_cast<void*>(msg), 0, size);

答案 5 :(得分:5)

memset(msg, 0, 65546)

答案 6 :(得分:1)

您可以使用for循环。但不要忘记最后一个字符必须是空字符!

char * msg = new char[65546];
for(int i=0;i<65545;i++)
{
    msg[i]='0';
}
msg[65545]='\0';

答案 7 :(得分:1)

类似C的方法可能没有这个问题的其他解决方案那么有吸引力,但为了完整性而添加到这里:

您可以使用NULL进行初始化:

char msg[65536] = {0};

或者使用零考虑以下内容:

char msg[65536] = {'0' another 65535 of these separated by comma};

但不要尝试not possible,所以请使用memset!

在第二种情况下,如果要将 msg 用作字符串,请在memset之后添加以下内容。

msg[65536 - 1] =  '\0'

this question的答案也提供了进一步的见解。