问题描述
当我们声明char变量时有一句话。
我们应该这样声明-> char ArrayName[Maximum_C-String_Size+1];
例如:
char arr[4+1] = {'a','b','c','d'}
但是
arr[4] = {'a','d'}
也可以
为什么需要加1? 谢谢!
解决方法
除非您要定义将用作空终止字符串的东西,否则无需这样做。
// these two definitions are equivalent
char a[5] = { 'a','b','c','d' };
char b[5] = { 'a','d','\0' };
如果您只想在其中包含4个char值的数组,并且不希望将其与任何希望找到字符串终止符的东西一起使用,则无需添加额外的元素。
,如果要在数组中存储C风格的 string ,则字符串终止符需要一个额外的元素。
与C ++不同,C没有唯一的字符串数据类型。在C语言中,字符串只是字符值的序列,包括零值终止符。字符串"foo"
表示为序列{'f','o',0}
。该终止符是各种字符串处理函数如何知道字符串的结尾的地方。终结符不是可打印字符,也不计入字符串的长度(strlen("foo")
返回3,而不是4),但是您需要留出空间来存储它。因此,如果您需要存储一个N个字符长的字符串,那么存储该字符串的数组至少需要N + 1个元素宽才能说明终止符。
但是,如果要存储的序列不应该被视为 string (您不打算打印它或使用字符串库函数对其进行操作),则不要无需预留额外的元素。