#include <stdio.h>
int main(void){
char a;
scanf("%s", &a);
return 0;
}
適合我,但我想知道在其他情況下是否會有任何意想不到的結果。使用「%s」格式說明符讀取單個字符時,scanf的行爲如何?
#include <stdio.h>
int main(void){
char a;
scanf("%s", &a);
return 0;
}
適合我,但我想知道在其他情況下是否會有任何意想不到的結果。使用「%s」格式說明符讀取單個字符時,scanf的行爲如何?
拿這個代碼例子 -
#include <stdio.h>
int main(void){
char a;
char b = '1';
char c = '1';
scanf("%s", &a);
printf("%c = %c\n", b, c);
return 0;
}
你希望它打印1 = 1
,但剛纔當我跑它,它印= 1
(至少在我的編譯器,不要指望任何來自穩定它)
scanf將一個字符串寫入a的地址,期望在那裏分配了足夠的空間(在這種情況下這是錯誤的),該字符串具有輸入字符和空終止符。在我的情況下,空終止符會覆蓋其他一些內存 - 即b。這是未定義的行爲 - 不要這樣做(至少在期望它沒有任何意義時)。
要麼使用格式%c
來匹配單個的char
,要麼使用%s
來匹配一個字符串。
混淆它們(如在你的代碼中)是未定義的行爲,什麼都可能發生。
我會使用getchar()來做到這一點,當然......我期望的是,因爲scanf不知道它得到了什麼樣的地址,所以它會寫入內存,它不應該... – ppeterka