gpt4 book ai didi

c - 数组输入太大

转载 作者:行者123 更新时间:2023-12-02 06:34:34 25 4
gpt4 key购买 nike

我只是想知道一个小问题。

#include <stdio.h>

int main()
{
char n_string[5];

printf("Please enter your first name: ");
scanf("%s", n_string);
printf("\nYour name is: %s", n_string);

return 0;
}

在第 5 行,我声明了一个包含 4 个字母的字符串。现在这意味着我只能在该字符串中包含 4 个字符,对吗?如果我执行我的程序并写下名字:Alexander,我得到输出:

Your name is Alexander.

我的问题是,我怎么能将 9 个字符的字符串放入一个包含 4 个字符的数组中?

最佳答案

这样做会覆盖程序堆栈的一部分,这通常是一件非常糟糕的事情。在这种情况下,您很幸运,但如果您进一步编写,当 main 尝试返回时,您几乎肯定会遇到 segfault

恶意行为者会将其用作缓冲区溢出攻击,以覆盖函数的返回地址。

如果您的问题是“为什么 C 允许我这样做?”,答案是 C 不对数组进行边界检查。它将数组(或多或少)视为指向内存中地址的指针,scanf 非常乐意写入内存位置,而不必担心它实际代表什么。

关于c - 数组输入太大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22891781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com