gpt4 book ai didi

c - n 在 `sscanf(s, "%d %n", &i, &n)` 中代表什么?

转载 作者:太空狗 更新时间:2023-10-29 17:07:46 26 4
gpt4 key购买 nike

手册页指出sscanf 的签名是

sscanf(const char *restrict s, const char *restrict format, ...);

我见过一个 answer on SO,其中一个函数使用 sscanf 来检查输入是否为整数。

bool is_int(char const* s) {
int n;
int i;
return sscanf(s, "%d %n", &i, &n) == 1 && !s[n];
}

查看 !s[n] 似乎建议我们检查 sscanf 是否扫描字符序列直到终止字符 \0 .所以我假设 n 代表函数结束时 sscanf 将在字符串 s 中的索引。

但是变量 i 呢?这是什么意思?

编辑:

更明确地说:我看到 sscanf 的签名想要一个 char * 类型的指针作为第一个参数。作为 seconf 参数的格式说明符,因此它知道如何解析字符序列以及与转换说明符一样多的变量作为下一个参数。我现在明白了 i 是用来保存解析后的整数的。

由于只有一个格式说明符,我试图推导n的功能。

我上面对 n 的假设是否正确?

最佳答案

看起来运算符(operator)已经有了他的答案,但由于我懒得自己查找并运行代码...

来自“C 袖珍引用”(Herbert Shildt 的第 2 版)scanf() 部分:

%n Receives an integer of value equal to the number of characters read so far

返回值:

The scanf() function returns a number equal to the number of the number of fields that were successfully assigned values

sscanf() 函数的工作原理相同,它只是从提供的缓冲区参数(在本例中为 s)获取输入。 "== 1"测试确保只解析了一个整数,并且 !s[n] 确保输入缓冲区在解析的整数之后正确终止和/或字符串中实际上只有一个整数。

运行这段代码,像“32”这样的 s 值给出了一个“真”值(我们的系统上没有将 bool 定义为一个类型)但是 s 作为“3 2”给出了一个“假”值,因为 s [n] 在这种情况下是“2”并且 n 的值为 2(在这种情况下“3”被解析以创建 int)。如果 s 为“3 ”,则此函数仍将返回 true,因为所有空格都被忽略并且 n 的值为 3。

另一个示例输入“3m”给出了您期望的“假”值。

关于c - n 在 `sscanf(s, "%d %n", &i, &n)` 中代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13199693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com