2017-10-21 101 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

這不會終止字符串。 –