我玩C和我碰到這個錯誤:SCANF失敗,總線錯誤
#include <stdio.h>
int main()
{
char* foo;
scanf("%s", foo);
printf("entered %s", foo);
return 0;
}
scanf
採用指針,foo
是指針,但我得到總線錯誤。我怎樣才能使它工作?
我玩C和我碰到這個錯誤:SCANF失敗,總線錯誤
#include <stdio.h>
int main()
{
char* foo;
scanf("%s", foo);
printf("entered %s", foo);
return 0;
}
scanf
採用指針,foo
是指針,但我得到總線錯誤。我怎樣才能使它工作?
你永遠不會初始化foo
,所以它指向一個或多或少隨機的位置在內存中。可以在堆棧上分配它。
char foo[10];
或內存分配它在堆上:
char *foo = (char *)malloc(10 * sizeof(char));
但是,如果你的malloc,不要忘了給free()。
注意緩衝區溢出;如果有東西需要緩衝區但沒有最大尺寸,請非常小心。例如,您可以通過執行%9s
來指定scanf
的最大長度。儘管如此,scanf
將不會計入終止空值,因此您需要傳遞一個小於緩衝區長度的值。
還要注意,你必須分配足夠的空間來存儲由scanf讀入的字符串。如果你只分配一個字符,如果你輸入的不是空字符串,你將會得到未定義的行爲(可能是段錯誤)。 – user168715 2010-06-06 17:57:55
這是一個常見問題 - 你想'char foo [SOMESIZE];' – 2010-06-06 17:55:14
我確實需要指針。 – 2010-06-06 17:55:37
不,你不知道。但如果你認爲你這樣做,'char * foo = malloc(SOMESIZE);' – 2010-06-06 17:57:37