2012-10-13 211 views
-4

可能重複:
What’s wrong with strcpy()? (Segmentation fault)運行時錯誤

下面的代碼工作正常(收益率 「5」,當我進入「ABCDE」):

char* tekst; 
scanf("%s", tekst); 
int n=strlen(tekst); 
printf("%d", n); 

但以下幾點:

char* tekst; 
scanf("%s", &tekst); 

int n=strlen(tekst); 

while(n--) 
    { 
     printf("%d", n); 
    } 

會爲我輸入的任何字符串生成運行時錯誤。問題是什麼?

+1

我沒有看到'strlen()'周圍的循環。 – alk

回答

0
char *tekst; 
scanf("%s", &tekst); 

是錯誤的。你應該這樣做

char tekst[100]; 
scanf("%s", tekst); 

改爲。那麼,你不應該這樣做(因爲它是不安全的),但至少這是scanf()的正確用法。 閱讀文檔。

0

您嘗試分配給char *tekst一個字符串。但是,當scanf試圖分配它時,tekst會指向一個隨機存儲器段,在那裏你不允許寫入。

您可以分配tekst與malloc,但您需要稍後釋放它,或使用此語法創建一個數組char tekst[100]

無論如何,如果用戶輸入超過100個字符,您可能會溢出此數組。您可以限制字符之間的掃描使用scanf("%99s", tekst);

您提供的第一個示例不會因爲「運氣」而崩潰,但是您創建了一個可能會崩潰的未定義行爲。