在C++中,如果我这样做:
char myArray[] = {'1','2','3','4','5','6','7','8','9'};
这是否分配了 10 个空间?最后一个元素是"/0"?
怎么样:
char myArray[9] = {'1','2','3','4','5','6','7','8','9'};
在这种情况下,我只分配了 9 个空间吗?这不好吗?
最后,当我这样做时会发生什么:
char myArray[10] = {'1','2','3','4','5','6','7','8','9','/0'};
char myArray[] = {'1','2','3','4','5','6','7','8','9'};
这是否分配了 10 个空间?最后一个元素是"/0"?
9号。
<小时 />char myArray[9] = {'1','2','3','4','5','6','7','8','9'};
在这种情况下,我只分配了 9 个空间吗?
是的。
这不好吗?
不。
<小时 />最后当我这样做时会发生什么
char myArray[10] = {'1','2','3','4','5','6','7','8','9','/0'};
假设你的意思是' '
,正是它的样子。
在这些情况下,没有任何魔力——你得到的正是你想要的。
自动 null 终止是字符串文字发挥作用的东西:
char myArray1[10] = "123456789";
char myArray2[9] = "123456789"; // won't compile - wrong size
char myArray3[] = "123456789"; // still 10 elements - includes null terminator
不,只有在使用字符串文字时,您才会获得尾随NUL
,即:
// Array of 10 bytes
char myArray[] = "123456789";
// same as:
char myArray[] = {'1','2','3','4','5','6','7','8','9',' '};
char myArray[] = {'1','2','3','4','5','6','7','8','9'};
这仅分配 9 个元素。
char myArray[9] = {'1','2','3','4','5','6','7','8','9'};
是的,这条线还分配了 9 个元素。
char myArray[10] = {'1','2','3','4','5','6','7','8','9','/0'};
最后一个应该是' '
而不是'/0'
。
你正在考虑的应该是
char myArray[] = "123456789";
分配 10 个字符(1 表示字符串文本末尾的尾随' '
)
当您使用 list-initialization 时,char
数组的行为与任何其他数组没有什么不同。你会期待吗
int x[] = {1,2};
神奇地将0
作为最后一个元素并x
有 3 个元素?
如果您提供的元素较少,则最后一个元素是值初始化的,因此
char myArray[10] = {'1','2','3','4','5','6','7','8','9'};
将以空值终止,但
char myArray[9] = {'1','2','3','4','5','6','7','8','9'};
不是。