2014-04-22 54 views
0

對此,我感到這裏如何打印出一個字符串的單個字符用C

char *string; 

scanf("%s",string); 

int i=strlen(string); 
int k = 0; 

while(k<i){  
     printf("%c", string[k]); 
     k++;  
    } 

有點混亂,當我編譯這個它打印出什麼。

+2

確實得到[打印](https://ideone.com/sBhMbQ) – GoldRoger

+3

您還需要在最後打印一個'\ n',或者執行'fflush(stdout)'。標準輸出默認是行緩衝的。 –

回答

2
scanf("%s",string); 

string是一個指針。您需要爲其分配內存,以便它可以使用scanf來保存輸入讀取。

char *string; 

該語句只是創建一個指向字符數組的指針,但不分配內存來保存數組。
您需要使用動態分配明確分配內存。你可以使用malloc等功能。讀this

或可以聲明一個陣列,而不是指針,

char string[SIZE]; 

SIZE是字符串的最大可能大小。
甚至可以使用getline而不是scanf,因爲如果傳遞NULL指針,getline會分配內存。

+0

所以我需要使用malloc而不是scanf中的字符串? 即 scanf(「%s」,string = malloc((strlen)* sizeof(char)))? – yukapuka

+0

@yukapuka在閱讀之前你不會知道字符串的大小,所以你需要讀取數字然後分配,或者改爲聲明一個字符數組。 – LearningC

+0

@yukapuka如果你可以使用它,你可以使用getline。因爲它會執行內存分配。 – LearningC

相關問題