c - 我已经在 C 中声明了一个大小为 1 的字符数组,但我已经读取了一个大小为 10 的字符串,但给定的代码工作得很好。

标签 c string

<分区>

#include<stdio.h>
int main()
{
    char name[1];
    scanf("%s",name);
    printf("%s",name);
}

我可以通过这个声明读取任意大小的字符串

最佳答案

首先,这是未定义的行为。在这种情况下会发生什么是不可预测的。

但是,我将给出一个带有附加变量的额外代码示例,以说明这种方法可能出现的问题。

int main()
{
    char name[1];
    int a=1;
    printf ("a = %d\n",a);
    scanf("%s",name);
    printf("%s\n",name);
    printf ("a = %d\n",a);
}

这是带有附加变量 a 的原始程序,它被初始化为 1 且未更改。

Output

a = 1
aaaa
aaaa
a = 6381921

如您所见,a 的值已通过输入一个大字符串而更改。

关于c - 我已经在 C 中声明了一个大小为 1 的字符数组,但我已经读取了一个大小为 10 的字符串,但给定的代码工作得很好。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53222720/

相关文章:

在 C 中创建并返回一个新数组

c - STDIN 重定向 : how to make program end once fgets() reads an expected ending line

javascript - 如何在没有 I 的情况下使用正则表达式验证 A-K 范围?

javascript - JS : Random String without Repeating Same String Twice

c - C 中的字符串数组,奇怪的行为

c++ - 静态常量 vs #define

c - clock_getres 的使用 - 新手 Linux C

c - 在 vfork()/clone() 中调用 execv() 之前设置 setuid()

javascript - 不要在循环的最后一次迭代中添加字符串

string - 将 ASCII 转换为十六进制