簡體   English   中英

為什么scanf不能為輸入參數分配值?

[英]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

當長度大於或等於10ijk無法獲得輸入:

# ./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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM