2010-06-06 69 views
0

我玩C和我碰到這個錯誤:SCANF失敗,總線錯誤

#include <stdio.h> 
int main() 
{ 
char* foo; 
scanf("%s", foo); 
printf("entered %s", foo); 
return 0; 
} 

scanf採用指針,foo是指針,但我得到總線錯誤。我怎樣才能使它工作?

+0

這是一個常見問題 - 你想'char foo [SOMESIZE];' – 2010-06-06 17:55:14

+0

我確實需要指針。 – 2010-06-06 17:55:37

+2

不,你不知道。但如果你認爲你這樣做,'char * foo = malloc(SOMESIZE);' – 2010-06-06 17:57:37

回答

8

你永遠不會初始化foo,所以它指向一個或多或少隨機的位置在內存中。可以在堆棧上分配它。

char foo[10]; 

或內存分配它在堆上:

char *foo = (char *)malloc(10 * sizeof(char)); 

但是,如果你的malloc,不要忘了給free()。

注意緩衝區溢出;如果有東西需要緩衝區但沒有最大尺寸,請非常小心。例如,您可以通過執行%9s來指定scanf的最大長度。儘管如此,scanf將不會計入終止空值,因此您需要傳遞一個小於緩衝區長度的值。

+0

還要注意,你必須分配足夠的空間來存儲由scanf讀入的字符串。如果你只分配一個字符,如果你輸入的不是空字符串,你將會得到未定義的行爲(可能是段錯誤)。 – user168715 2010-06-06 17:57:55