![](/img/trans.png)
[英]Why can't you use scanf() in C for multiple input arguments of different types?
[英]Why can't scanf assign values to the input arguments?
我的C
代碼是這樣的:
#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
的行為?
您告訴scanf
最多將9個字符讀入s
,這就是它的作用。 一旦讀取了9個字符,它將嘗試將整數讀入i
,但是下一個輸入字符是t (第十個字符)。 該值不能轉換為整數,因此掃描將終止並且scanf
返回1,表示它已成功讀取單個值。
不幸的是,您從未檢查過返回值。 你應該解決這個問題。
t返回到內部緩沖區,因此下一個scanf調用將從該字符開始。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.