2017-10-21 59 views
0

我想创建一个字符数组与X个字符。字符数组打印1字符短什么我分配

我需要第一个X-1字符为空格,我需要第X个字符为*

我写了下面的:

int i = 0; 
int X = 5; 
char spaces[X]; //In this case X is 5 so the array should have indexes 0 - 4 
for(i = 0; i < X; i++) { 
    spaces[i] = '*'; //I start by setting all 5 char's equal to '*' 
    printf("spaces = '%s'\n", spaces); //This was to make sure it ran the correct # of times 
} 

该段的输出是每一次以下,“GH”是不同的:

spaces = '*gh' 
spaces = '**h' 
spaces = '***' 
spaces = '****' 
spaces = '****' 

为什么空间只能长到4代替5个字符? 不应该有空格[4] ='*';被称为?

设置整个字符串等于后“*”我跑了循环第二:

for(i = 0; i < X-1; i++) { 
    spaces[i] = ' '; 
} 

然后应该设置的一切,但第十届字符等于“”,但由于该字符串行事像它的仅长X-1个字符,整个事情被设置为空间和它出来像这样

spaces = ' '; 

4个空格,当我需要4位后跟*

+0

的最后一个字符是'空terminator''\ 0'。 – Raindrop7

+0

事实上,你可以使用'Xth'元素来存储另一个字符,但你会得到垃圾输出附加到你的输出。\ – Raindrop7

+0

像[this](https://ideone.com/zHaPla) – BLUEPIXY

回答

1

您错过了字符串终止字符\0,这是需要使用printf("%s",...)将字符串打印为字符串后才需要的。 因此,让阵列比要打印的项目大一个项目,并使用0进行初始化,以便您写入阵列的所有内容都将成为有效的字符串。否则,你产生不确定的行为:

int main (void) 
{ 
#define X 5 

    int i = 0; 
    char spaces[X+1] = { 0 }; 
    for(i = 0; i < X; i++) { 
     spaces[i] = '*'; 
     printf("spaces = '%s'\n", spaces); 
    } 
} 
0

为了设置第一个X-1的字符是空格和第十届字符是一个。 这将始终有最后一个字符 ''

for(i = 0; i < X-1; i++) { 
    spaces[i] = ' '; 
    spaces[i+1] = '*'; 
    printf("spaces = '%s'\n", spaces); 
} 
+0

这不会终止字符串。 –