gpt4 book ai didi

c - union 内存分配::存储比分配内存更多的内容

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:50 24 4
gpt4 key购买 nike

我定义了一个 union 体

union person
{
int roll;
char fname[10];
char lname[20];


}p1;

并且 sizeof(p1)=20 字节。但在将内容存储在 p1 中时,它存储了超过 20 个字符。

void main()
{
printf("\n The size of the union is %zu\t",sizeof(p1));
printf("\n Enter the details here :\t");
scanf("%d",&p1.roll);
scanf("%s",p1.fname);
scanf("%s",p1.lname);
printf("\n The union contains are \n");
printf("\n The roll no is :: \t %d",p1.roll);
printf("\n The fname is :: \t %s ",p1.fname);
printf("\n The laname is :: \t %s\n",p1.lname);


}

当我输入超过 20 个字符时,它仍然被存储。

最佳答案

when i give input more than 20 char,still its stored.

当然可以。为什么不呢?您向 scanf 传递了一个指针,基本上是在说“在这里写尽可能多的字符!”

scanf("%9s",p1.fname);
scanf("%19s",p1.lname);

这将防止 scanf 溢出缓冲区。请注意,我已经从每个长度中减去一个,因为 scanf 还需要编写一个 NUL 终止符。

现在,下一个问题:为什么要使用 union? union 用于提供相同数据的不同 View 。写给一个成员实际上会破坏所有其他成员的内容。 union 很少使用,与 struct 相比。

如果要存储多条相关信息,请使用struct

struct person
{
int roll;
char fname[10];
char lname[20];
} p1;

关于c - union 内存分配::存储比分配内存更多的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24358897/

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