2017-05-10 83 views
-1

在下面給出的代碼中,我嘗試使用scanf中使用字符串輸入,而循環。當我打印該字符串時,它將打印出沒有第一個字符。但是,當我將它複製到另一個字符串並打印新字符串時,它會正確打印。printf跳過字符數組的第一個字符

在我的代碼,如果我給「ABC」作爲輸入和打印兩個字符串,然後「BC ABC」打印,而不是「ABC ABC」

這是什麼原因?我的代碼有問題嗎?

int main() 
{ 
    char st1[10],st2[]=""; 
    while(scanf("%s",st1)==1){ 
     strcpy(st2,st1); 
     printf("%s %s\n",st1,st2); 
     strcpy(st2,""); 
    } 
    return 0; 
} 
+2

提示:'st2 [] =「」'可能沒有意義。 –

+0

它是C還是C++? – tilz0R

+0

哦!你能解釋爲什麼在使用「st2 [10]」之後它正常工作嗎? @SouravGhosh –

回答

0

char st1[10],st2[]="";保留10個字節用於st1st2 1個字節。

然後你試圖將st1的內容複製到st2。

刪除這是不是必需的:

strcpy(st2,""); 

更改此:

char st1[10],st2[10]; 

現在你有兩個變量的內存,你可以之間複製數據。在第一個示例中,您沒有爲st2變量保留足夠的內存,行爲通常未定義。