[英]how to initialize a char array?
char * msg = new char[65546];
想要將它們全部初始化為 0。 在 C++ 中執行此操作的最佳方法是什么?
char * msg = new char[65546]();
它被稱為值初始化,並在C ++ 03中引入。 如果你碰巧發現自己被困在前十年,那么你需要使用std::fill()
(或memset()
如果你想假裝它是C)。
請注意,這不適用於零以外的任何值。 我認為C ++ 0x會提供一種方法來做到這一點,但我有點落后於時代,所以我不能對此發表評論。
更新:似乎我對語言的過去和未來的反思並不完全准確; 請參閱更正的評論。
“大多數C ++”的方法是使用std::fill
。
std::fill(msg, msg + 65546, 0);
沒有一個非常好的理由不這樣做,我可能會使用:
std::vector<char> msg(65546, '\0');
在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緩沖區執行所有操作,但更安全,更靈活,有時甚至更高效(避免需要線性重新計算字符串長度,例如)。 最重要的是,您不必釋放手動分配的內存,因為析構函數將為您執行此操作。
此方法使用' C'memset函數,並且速度非常快(避免了char-by-char循環)。
const uint size = 65546;
char* msg = new char[size];
memset(reinterpret_cast<void*>(msg), 0, size);
memset(msg, 0, 65546)
你可以使用for循環。 但不要忘記最后一個字符必須是空字符!
char * msg = new char[65546];
for(int i=0;i<65545;i++)
{
msg[i]='0';
}
msg[65545]='\0';
如果您感到恐慌並且無法在構造函數中將動態數據分配給const char *,您可以逐個插入動態緩沖區的每個元素。 您甚至可以在進行印記之前將 snprintf() 寫入緩沖區。
client_id = new char[26] {
buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],buf[8],buf[9],
buf[10],buf[11],buf[12],buf[13],buf[14],buf[15],buf[16],buf[17],buf[18],buf[19],
buf[20],buf[21],buf[22],buf[23],buf[24],'\0'
};
為了掩蓋你一直在做的事情,也許編輯器有一個選項,你可以將前景色設置為與背景相同?
在被解雇之前,您實際上可以在頭文件聲明中用足夠的空間填充 const 字符,然后在構造函數中分配實際數據。 偉大的!
const char* client_id = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
它是一個 const 指針,在構造函數處理它之前不必初始化。
const char* client_id;
注意:您可以在頁面頂部寫: using namespace std,從而避免在每個命令的開頭寫 std::。
字符 * 味精 = 新字符 [65546]={0}; 此命令將所有數組重置為 0。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.