字符数组分配



在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'}; 

不是。

最新更新