gpt4 book ai didi

c - scanf %d 大输入段错误

转载 作者:太空狗 更新时间:2023-10-29 17:23:13 25 4
gpt4 key购买 nike

所以我对一些 C 代码运行了一些静态代码分析器,令我惊讶的是警告:

int val;
scanf("%d", &val);

表示对于足够大的输入,这可能会导致段错误。可以肯定的是,这确实会发生。现在修复很简单(指定一些宽度;毕竟我们知道一个有效整数最多可能有多少个位置,具体取决于体系结构)但我想知道的是为什么首先会发生这种情况以及为什么会这样是否被视为 libc 中的一个错误(并且是一个简单的修复错误)?

现在我假设我首先缺少这种行为的某些原因?

编辑:好的,因为这个问题似乎不是那么明确,多一点解释:不,代码分析器一般不会警告 scanf,而是警告 scanf 读取没有指定宽度的数字。

所以这是一个最小的工作示例:

#include <stdlib.h>
#include <stdio.h>

int main() {
int val;
scanf("%d", &val);
printf("Number not large enough.\n");
return 0;
}

我们可以通过发送一个巨大的数字(例如使用 Python)来获得段错误:

import subprocess
cmd = "./test"
p = subprocess.Popen(cmd, stdin=subprocess.PIPE, shell=True)
p.communicate("9"*50000000000000)
# program will segfault, if not make number larger

最佳答案

如果静态分析器是 cppcheck,那么它会因为 glibc 中的错误而发出警告,此错误已被修复:http://sources.redhat.com/bugzilla/show_bug.cgi?id=13138

关于c - scanf %d 大输入段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6554746/

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