在下面的代码中,您可以看到,我的数组的长度是10
。当我使用scanf
将一些字符读入数组时,它允许我超过这个数字。为什么会这样呢?
我已经尝试过较小大小的字符串,并且我看到了我所期望的:一个关于“检测到堆栈崩溃”的错误。
#include<stdio.h>
int main()
{
char nome[10];
printf("Nome: ");
scanf("%s", nome);
printf("\n\n%s\n", nome);
return 0;
}
发布于 2019-05-27 00:31:24
正如您所指出的,scanf
的%s
格式说明符的前提条件是目标数组必须有足够的空间。
然而,当你稍微超过这个数字时,它可能会偶然工作的事实并不意味着它总是有效的。这是未定义的行为。
特别是,这里最有可能发生的情况是,当您只覆盖几个额外的字符时,您不会触发堆栈崩溃检测器。
https://stackoverflow.com/questions/56315365
复制相似问题