我是一個初學者,並且我遇到了scanf和字符串的問題。C中的scanf和字符串的分段錯誤
這裏是我寫我的問題的一個例子。
#include <stdio.h>
#include <string.h>
int main(void)
{
char* string;
scanf("%s", &string);
if (strcmp(string, "Foo") == 0) //segmentation fault here
printf("Bar");
}
基本上,這個代碼編譯,但是當我運行它,我的strcmp()得到一個分段錯誤
,如果我替換爲「&串」它的工作原理該行的「弦」,但我從編譯器得到這個錯誤
/usr/include/stdio.h:362:12: note: expected 'const char * __restrict__' but argument is of type 'char **'
這讓我覺得這個解決方案不是很理想。
另外,如果我聲明的字符串是這樣的:
char string[100];
,沒有任何警告的作品,但這也並不理想,因爲我不知道該字符串多大將是。
有沒有更好的解決方案我在這裏失蹤,還是這些是我唯一的選擇?
謝謝。
讀一本書 - C是不是一個語言,通過試驗和錯誤學習。 (在許多情況下,如果出現錯誤,程序將默默工作,或給出令人困惑的結果;結果導致錯誤的心理模型以及對數組和指針之間差異的永久理解等) – 2014-12-05 01:49:30
你需要聲明足夠大的字符串(正如你猜測的那樣),但是有多大?閱讀關於malloc。如果你將字符串聲明爲char string [1];你可能有一個有效的程序,但有時卻失敗了,因爲你存儲sscanf()'ed字符串的位置太小... – ChuckCottrill 2014-12-05 02:33:47