c++ - 过于结构体,存进char *的buff,再写入文件
天蓬老师
天蓬老师 2017-04-17 14:50:46
[C++讨论组]
struct data
{
    u_short sin_port;
    struct  in_addr sin_addr;
    unsigned char id;
};

struct data Data[141];

char *buf,*buf1,
buf1 = (char *)malloc(10000);
memset(buf1, 0, 10000);

for (i =0;i< 141;i++)
 {
        memcpy(buf1, &Data[i].id,20);
        printf("buf11: %x\n", buf1);
        buf1+=20;
        memcpy(buf1, &Data[i].sin_addr, 4);
        buf1+=4;
        memcpy(buf1, &Data[i].sin_port, 2);
        buf1+=2;
        size1 += 26;
 }
 buf1 -= size1;
   
write(fd2, buf1, size1+1);
close(fd2);
free(buf1);

我发现这样写入的数据总是不对/?请教哪里有问题啊?一般都是先写入buffer,再写入文件?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(4)
天蓬老师

buf1是字符串类型,应该有结束符‘0’来收尾,否则会有乱码。

阿神

1.标题“过于结构体” , 应该是“对于结构体”
2.“char buf, buf1,” , 最好用西文分号结束。
3.内存拷贝memcpy的具体含义参考下标准手册,按你的意思,应该是这个函数第三个参数问题。

……

PHP中文网

赋值前先初始化 buf = buf1 保存数据起始位置
最后使用buf而不是buf1写入数据 write(fd2, buf, size1+1);
buf1 -= size1 也是多余处理

阿神

不要这么麻烦。你顶一个struct的指针,指向"buf指针强转型后的位置",然后将你要copy的struct赋值过来即可。
char* buf = new char[100];
struct Data d1; // init d1
struct Data d2 = (struct Data)buf;
*d2 = d1;

这是buf空间的前对应字节空间即存储了d1的值

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号