gpt4 book ai didi

c - 从结构中输出值

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

#include<stdio.h>

struct classifier
{
char src_address[15];
char dst_address[15];
int src_port;
int dst_port;
};

main()
{
int i;
struct classifier clsf[4];
struct classifier *ptr;

for(i = 0; i < 2; i++)
{
ptr = & clsf[i];
scanf("%s",ptr[i].src_address);
scanf("%s",ptr[i].dst_address);
scanf("%d",&ptr[i].src_port);
scanf("%d",&ptr[i].dst_port);
display(ptr[i]);
}
}

void display(struct classifier ptr)
{
printf("\n%s", ptr.src_address );
printf("\n%s", ptr.dst_address );
printf("\n%d", ptr.src_port);
printf("\n%d", ptr.dst_port );
}

我得到的o/p是这样的

this is i/p

123.123.123.123
213.234.234.124
3244
1342

o/p
123.123.123.123213.234.234.124
213.234.234.124
3244
1342

为什么第一个值重复。代码有什么问题

最佳答案

因为你在字符串中写入了太多数据。

char src_address[15];

的长度为 15 个字符,包括终止字符 0,因此您不能在其中放入超过 14 个字符。但是,123.123.123.123 是 15 个字符。

由于 src_addressdst_address 这两个字段恰好存储在连续的内存块中,因此写入后者的值紧随其后 - 没有分隔的 0 字节 - 前者.因此,当您打算打印前者时,printf 不得不同时打印两者。

您应该在 char 数组中保留足够的空间来合并终止值 0(并明确确保它确实放在那里!)。一般来说,在现实生活中的应用程序中你应该 defend yourself against buffer overruns caused by too long input .

关于c - 从结构中输出值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4713904/

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