c - 数组堆栈溢出

标签 c

    #include
    int main(void)
    {
        char str[100]="88888888888888";
        char t[20]="";
        gets(t);
        puts(str);
        puts(t);
        return 0;
    }

enter image description here

第一行

555555555555555555555555555555555

已放入。

为什么str55555555555 ?为什么str不是8888888888888888855555555555588888

最佳答案

您覆盖了 t 缓冲区,并到达了 str 缓冲区,其中设置了输入的其余部分和 null 终止符。 puts 仅打印到 null 终止符。

看起来就像这样:

[ t (20)             ][str(100)                                 ]
 55555555555555555555  5555555555555\0

请注意,虽然 t 被声明为 char[20],但当您打印它时,您会得到完整的输入(超过 20),因为 puts (再次)停在空终止符处。

顺便说一句,这是缓冲区溢出,而不是堆栈溢出,但此代码也可能发生堆栈溢出。

关于c - 数组堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10154892/

相关文章:

c - Vim - YouCompleteMe RestartServer 不断关闭

c - C 表达式中模运算与按位与之间的联系

c - 验证 scanf 参数

c - 有效的stdin阅读c编程

c - RLE 实现偶尔会失败

c - 在内核模块中创建链表

c - 当标志是 char 字符串指针而不是 int 时,open() 函数错误

c - 如何将 uint8_t 数组与 C 中的字符串进行比较?

c - 如何在链表中将节点从头移动到尾? C

c - 从结构类型中删除元素