gpt4 book ai didi

c - Scanf 读取超过预定义字符数组大小的字符串

转载 作者:行者123 更新时间:2023-12-01 06:14:50 30 4
gpt4 key购买 nike

我正在尝试通过 scanf 读取一个字符串,如下所示:

char input[8];
scanf("%s",input);

事实证明,该程序可以读取超过 8 个字符。假设我输入了 123456789012345 并且 strlen(input) 返回 15。

但是当我将输入设置为:

char input[4];
scanf("%s",input);

输入“12345”会导致'16146 segmentation fault'。有人知道这是怎么发生的吗?

最佳答案

从技术上讲,这两种情况都会调用未定义的行为。第一种情况恰好在您的系统上运行不应被视为意味着您的程序定义明确。测试只能表明错误的存在,而不能表明错误的存在。

由于您仍在学习 C,我将借此机会为您提供有关从 stdin 读取输入的建议:始终将要读取的输入长度限制为正在读取的缓冲区的长度在 to 中,在末尾为空终止符保留一个位置。

如果您想使用scanfstdin 读取字符串,那么在字符串格式说明符前加上字符串的最大长度比使用a 更安全原始 “%s”。例如,如果我有一个 char buffer[20]; 是调用 scanf 的目的地,我将使用格式字符串 "%19s"

关于c - Scanf 读取超过预定义字符数组大小的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51923730/

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