1
我C
代碼是這樣的:爲什麼scanf無法爲輸入參數賦值?
#include <stdio.h>
#include <string.h>
int main(void) {
char s[10];
int i = 0, j = 0, k = 0;
memset(s, 0xff, sizeof(s));
scanf("%9s%d%d%d", s, &i, &j, &k);
printf("%s,%d,%d,%d\n", s, i, j, k);
}
爲了避免緩衝區溢出,我在scanf
使用%9s
。但我發現,如果輸入的字符串長度小於10
,結果正如我預料:
# ./test
short 1 2 3
short,1,2,3
雖然長度較長或等於10
,i
,j
和k
不能獲得輸入:
# ./test
verylongstr 1 2 3
verylongs,0,0,0
如何理解scanf
的行爲?
如果你分配10個字節並把12個字節存在那裏,你得到的任何東西都是純粹的巧合。你可能會遇到崩潰,或者錯誤的答案,或者正確的答案,或者惡魔飛出你的鼻子。一旦違反規則,編譯器沒有義務做任何明智的事情。 –
@LeeDanielCrocker這就是使用'%9s'的全部觀點,他在他的問題中解釋了這一點。 – Barmar