在下面的代码中,如您所见,我的数组的长度为10
。当我使用scanf
将一些字符读入数组时,它使我可以超过该数字。为什么有可能?
我已经尝试使用较小尺寸的字符串,并且看到了我的期望:关于“检测到堆栈粉碎”的错误。
#include<stdio.h>
int main()
{
char nome[10];
printf("Nome: ");
scanf("%s", nome);
printf("\n\n%s\n", nome);
return 0;
}
答案 0 :(得分:1)
您指出,scanf
的%s
格式说明符的前提是目标数组必须有足够的空间。
但是,当您稍微超过该数字时,它可能偶然起作用的事实并不意味着它总是会起作用。这是未定义的行为。
特别是,这里最有可能发生的事情是,当您只覆盖一些额外的字符时,您不会触发堆栈粉碎检测器。