1

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

4 回答 4

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

假设你的意思是'\0',它的样子。

在任何这些情况下都没有魔法——你得到的正是你想要的。

自动空终止是与字符串文字一起发挥作用的东西:

char myArray1[10] = "123456789";
char myArray2[9]  = "123456789";  // won't compile - wrong size
char myArray3[]   = "123456789";  // still 10 elements - includes null terminator
于 2012-11-12T16:21:39.283 回答
3

不,您只会NUL在使用字符串文字时得到尾随,即:

// Array of 10 bytes
char myArray[] = "123456789";

// same as:
char myArray[] = {'1','2','3','4','5','6','7','8','9','\0'}; 
于 2012-11-12T16:22:00.440 回答
1
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'代替'/0'.

你想的应该是

char myArray[] = "123456789";

它分配 10 个字符(1 个用于'\0'字符串文字末尾的尾随)

于 2012-11-12T16:23:45.780 回答
1

char使用列表初始化时,数组的行为与任何其他数组没有什么不同。你会期待吗

int x[] = {1,2};

神奇地将 a 添加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'}; 

不是。

于 2012-11-12T16:24:06.423 回答