-5
說我有下面的代碼:爲什麼char *給我一個分段錯誤?
char* input;
scanf("%s",&input);
printf("%s\n",input);
給出了一個分段故障而
char input[20];
scanf("%s",&input);
printf("%s\n",input);
給我任何錯誤。
說我有下面的代碼:爲什麼char *給我一個分段錯誤?
char* input;
scanf("%s",&input);
printf("%s\n",input);
給出了一個分段故障而
char input[20];
scanf("%s",&input);
printf("%s\n",input);
給我任何錯誤。
char* input;
scanf("%s",&input);
printf("%s\n",input);
讓我們一行一行吧。
input
是char *
。所以我們有足夠的空間指向一個字符的指針,但是然後我們嘗試存儲,然而很多字符都是在那裏輸入的。因此,如果輸入的字符數多於用於存儲指向角色的指針數,則會崩潰。
如果你想存儲一個字符串,你需要爲字符串分配空間,就像你在第二個例子中給出的那樣沒有錯誤。只要將中間線改爲scanf("%s",input);
即可。你想input
衰減到一個指向其內容的指針。
他的第二個例子也是錯誤的。他將'scanf'用於'&input',其中'char input [20]'。 –
您在第一個示例中的指針指向「無處」(即指向某個隨機位置)。 – usr2564301
@Jongware沒關係,他從不使用它的內容。而他的下一行代碼填充它。 –
實際上,這兩個代碼段都不正確。第二個片段在它應該傳入'input'時將'&input'傳遞給'scanf'。 (編譯器應該生成一個警告,如果沒有,請調高警告級別。)格式說明符應限制字符數(因爲緩衝區很小)。正確的格式說明符將是'「%19s」'。代碼應該檢查'scanf'的返回值。如果'scanf'失敗,那麼'input'將被初始化,並且'printf'將顯示未定義的行爲。所以我看到它,你在三行代碼中有三個錯誤。 – user3386109