char * msg = new char[65546];
Run Code Online (Sandbox Code Playgroud)
想要为所有人初始化为0.在C++中执行此操作的最佳方法是什么?
Mik*_*our 61
char * msg = new char[65546]();
Run Code Online (Sandbox Code Playgroud)
它被称为值初始化,并在C++ 03中引入.如果你碰巧发现自己被困在前十年,那么你需要使用std::fill()(或者memset()如果你想假装它是C).
请注意,这不适用于零以外的任何值.我认为C++ 0x会提供一种方法来做到这一点,但我有点落后于时代,所以我不能对此发表评论.
更新:似乎我对语言的过去和未来的反思并不完全准确; 请参阅更正的评论.
Pet*_*der 16
"大多数C++"的方法是使用std::fill.
std::fill(msg, msg + 65546, 0);
Run Code Online (Sandbox Code Playgroud)
Jer*_*fin 15
没有一个非常好的理由不这样做,我可能会使用:
std::vector<char> msg(65546, '\0');
Run Code Online (Sandbox Code Playgroud)
在C++中执行此操作的最佳方法是什么?
因为你这样问:
std::string msg(65546, 0); // all characters will be set to 0
Run Code Online (Sandbox Code Playgroud)
要么:
std::vector<char> msg(65546); // all characters will be initialized to 0
Run Code Online (Sandbox Code Playgroud)
如果您正在使用接受char*或const char*的C函数,那么您可以:
some_c_function(&msg[0]);
Run Code Online (Sandbox Code Playgroud)
如果它接受const char*或data(),你也可以在std :: string上使用c_str()方法.
这种方法的好处是,您可以使用动态分配的char缓冲区执行所有操作,但更安全,更灵活,有时甚至更高效(避免需要线性重新计算字符串长度,例如).最重要的是,您不必释放手动分配的内存,因为析构函数将为您执行此操作.
此方法使用' C'memset函数,并且速度非常快(避免使用char-by-char循环).
const uint size = 65546;
char* msg = new char[size];
memset(reinterpret_cast<void*>(msg), 0, size);
Run Code Online (Sandbox Code Playgroud)
memset(msg, 0, 65546)
Run Code Online (Sandbox Code Playgroud)