字符数组分配

时间:2012-11-12 16:19:54

标签: c++ character-arrays

在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 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

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

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

// same as:
char myArray[] = {'1','2','3','4','5','6','7','8','9','\0'}; 

答案 2 :(得分: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'

答案 3 :(得分:1)

使用列表初始化时,

char数组的行为与任何其他数组的行为不同。你期待吗

int x[] = {1,2};

以魔法方式附加0作为最后一个元素,并使x有3个元素?

如果你提供的元素较少,那么最后的元素是值初始化的,所以

char myArray[10] = {'1','2','3','4','5','6','7','8','9'}; 

将以null结尾,但

char myArray[9] = {'1','2','3','4','5','6','7','8','9'}; 

不是