gpt4 book ai didi

c - 如果 scanf() 得到一些与格式字符串不匹配的字符会发生什么?

转载 作者:太空狗 更新时间:2023-10-29 15:32:28 24 4
gpt4 key购买 nike

#include <stdio.h>

int main(void)
{
int i, j, k;
scanf("%d%d%d", &i, &j, &k);
printf("%d %d %d", i, j, k);
return 0;
}

如果我们输入1,2,3,会发生什么?为什么?

根据 https://stackoverflow.com/a/18297691/2646069 ,如果 scanf() 读取了一个意外的字符串,它将提前返回,因此不会修改最后一个成功值之后的任何值。

我在 -O0 上试过 clang (LLVM 6.1.0),上面的解释是正确的,但是在 -O2 上,第二个变量总是一个随机数但与之前的scanf()不同,第三个变量总是0

最佳答案

根据 the manual , scanf 的返回值告诉您使用这些参数是否安全。

Upon successful completion, these functions shall return the number of successfully matched and assigned input items; this number can be zero in the event of an early matching failure. If the input ends before the first matching failure or conversion, EOF shall be returned. If a read error occurs, the error indicator for the stream is set, EOF shall be returned

如果您输入 1,2,3,则 scanf 将返回 1,表明第一个参数可以安全使用,并且匹配失败发生在第一个,因为它不匹配根据格式字符串预期的输入。

如果你在这之后使用 jk,那么你的代码将使用一个不确定的值,这是未定义的行为,显然是一个来源要避免的不稳定行为...检查 scanf 的返回值非常重要,因为您使用的链接也鼓励。

关于c - 如果 scanf() 得到一些与格式字符串不匹配的字符会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29551794/

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