c - Scanf 允许在静态数组中存储更多数量的字符

标签 c

在下面的代码中,如您所见,我的数组的长度是 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/

相关文章:

c++ - 如何发现Linux系统内存泄漏?

c++ - 常量声明 - 语言差异?

c - GDB 堆栈输出未显示完整的十六进制地址?

c - 数据类型和格式说明符

c - 如何打印 "x"形状?

c - C 中 __uuidof 的替代方案

c - rb_class_new_instance 引发 "ArgumentError: wrong type"- 为什么?

c - 浮点乘法溢出

c - 如何通过 C 中的函数返回多个值?

使用函数更改指针包含的地址