[英]Why does the sscanf %n format specifier have no effect on the return value?
無論%n說明符是否存在,下面 sscanf 函數的返回值都是 1。 然而變量n 中的值發生了變化(在這種情況下從 0 到 5),那么為什么函數不返回 2?
#include <stdio.h>
int main() {
int d = 0, n = 0;
char *p = "10 foo bar";
printf("%d\n", sscanf(p, " %d %n", &d, &n ) );
printf("%d %d\n", d, n);
return 0;
}
在我看來,這是設計使然,而不是這里的代碼問題。 這是因為%n不會失敗,因為它只是計算讀取的字符數,所以以這種方式檢查它是多余的嗎? 謝謝,我很想了解更多這里發生的事情。
sscanf(p, " %d %n", &d, &n )
%n (next) 是到目前為止從輸入緩沖區讀取的字節數。 它是一個輸出參數,用於指示在 sscanf 函數返回之前已讀取輸入緩沖區的距離。 sscanf 返回值不同,它表示“成功匹配的輸入項數”。
您可以將%n
(和int n
next 參數)視為次要輸出(或返回)值。
https://linux.die.net/man/3/sscanf
到目前為止從輸入消耗的字符數通過下一個指針存儲。
您的案例的一些示例以查看%n
(下一個指針)的效果:
int d = 0, n = 0;
// char *p = "100 foo bar"; // 100, 6 // read upto 6 chars, parse 100
// char *p = "100foo bar"; // 100, 3 // read upto 3 chars, parse 100
// char *p = "foo100 bar"; // 0, 0 // read 0 chars, fails to parse any int
char *p = "10 foo bar"; // 10, 5 // read 5 chars, parse 10
printf("%d\n", sscanf(p, " %d %n", &d, &n ) );
printf("%s\n", (p + n)); // "foo bar"
來自 C99(第 7.19.6.2 節):
%n
指令的執行不會增加fscanf
函數執行完成時返回的賦值計數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.