Scanf允许在静态数组中存储更多字符

时间:2019-05-26 16:27:54

标签: c

在下面的代码中,如您所见,我的数组的长度为10。当我使用scanf将一些字符读入数组时,它使我可以超过该数字。为什么有可能?

我已经尝试使用较小尺寸的字符串,并且看到了我的期望:关于“检测到堆栈粉碎”的错误。

#include<stdio.h>
int main()
{
    char nome[10];
    printf("Nome:   ");
    scanf("%s", nome);
    printf("\n\n%s\n", nome);
    return 0;   
}

1 个答案:

答案 0 :(得分:1)

您指出,scanf%s格式说明符的前提是目标数组必须有足够的空间。

但是,当您稍微超过该数字时,它可能偶然起作用的事实并不意味着它总是会起作用。这是未定义的行为。

特别是,这里最有可能发生的事情是,当您只覆盖一些额外的字符时,您不会触发堆栈粉碎检测器。