char * msg = new char[65546];
想要将所有这些初始化为0。在C ++中执行此操作的最佳方法是什么?
答案 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的答案也提供了进一步的见解。