我有尺寸的字符数组512即char数组初始化为' 0'会发生什么?
char buffer [512];
之后的某一点,此变量被修改成这种
buffer [40] = '\0';
这是什么任务确实给变量?它是否将数组中的前40个字符初始化为null?
我有尺寸的字符数组512即char数组初始化为' 0'会发生什么?
char buffer [512];
之后的某一点,此变量被修改成这种
buffer [40] = '\0';
这是什么任务确实给变量?它是否将数组中的前40个字符初始化为null?
它只分配数组中的第41个字符到\0
。因此,现在字符串包括字符在数组的前40个元素中表示的内容,即0到39个索引(假设在任何以前的元素中没有其他NUL
字符 - 感谢Kerrek SB !!)。
希望这有助于!
不。它将值NUL存储在数组中的第41个位置。
到第40个字符初始化到NUL
memset(buffer, '\0', 40);
至Init,在编译时整个缓冲区到NUL,尝试
char buffer[512] = {0};
或
char buffer[512] = "";
要初始化它在运行时间,试试
memset(buffer, '\0', sizeof (buffer));
Mac是对的;位置41. – EvilTeach
它分配字符'\0'
(即, NUL
字符)到第41个数组元素。
那么,在前40个字符“至多”。之前可能会有另一个零。 –
@KerrekSB:谢谢你的收获!更新回复 –
感谢KerrekSB和@ another.anon.coward - 非常有帮助的答案,所以现在缓冲区值被限制为前40个字符(假设其间没有其他空字符)。 –