在下面的代码中,如您所见,我的数组的长度是 10
。当我使用scanf
时将一些字符读入数组,它让我超过了这个数字。为什么可以?
我已经尝试过使用较小尺寸的字符串,并且看到了我所期望的结果:有关“检测到堆栈粉碎”的错误。
#include<stdio.h>
int main()
{
char nome[10];
printf("Nome: ");
scanf("%s", nome);
printf("\n\n%s\n", nome);
return 0;
}
最佳答案
scanf
的 %s
格式说明符的先决条件正如您所指出的,目标数组必须有足够的空间。
但是,当您稍微超过该数字时,它可能会偶然起作用,但这并不意味着它总是起作用。这是未定义的行为。
特别是,这里最有可能发生的情况是,当您只覆盖一些额外的字符时,您不会触发堆栈粉碎检测器。
关于c - Scanf 允许在静态数组中存储更多数量的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56315365/