免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 16033 | 回复: 10
打印 上一主题 下一主题

[C] 结构体给数组赋值问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-22 11:33 |只看该作者 |倒序浏览
如何将结构体的内容 传给数组?
#define INT8U unsigned char
typedef struct{
  INT8U  idname;
  INT8U  idlen;
  INT8U  idvalue[4];

  INT8U  timename;
  INT8U  timelen;
  INT8U  timevalue[7];
  
}PACKED  S_STRU, *PS_STRU;

S_STRU sstru;

INT8U sendbuf[1024];

我这样做行不行?
memcpy(sendbuf, &sstru, sizeof(sstru));

论坛徽章:
0
2 [报告]
发表于 2009-04-22 14:03 |只看该作者
位什么没人回答啊??  哪位高手举手之劳一下嘛!

论坛徽章:
0
3 [报告]
发表于 2009-04-22 14:42 |只看该作者

回复 #2 herocsz 的帖子

^_^
没啥不可以的,最多编译要是报错的话,memcpy的时候第二个参数加个类型强制转换。
你要知道那个数组你要给他什么值。怎么用这个数组就 中 了!
别动不动高手低手的。
俺不是高手

论坛徽章:
0
4 [报告]
发表于 2009-04-22 15:11 |只看该作者
不知会不会牵涉到数据对齐的问题,
struct貌似是4字节对齐的吧...

论坛徽章:
0
5 [报告]
发表于 2009-04-22 15:24 |只看该作者
老老实实的搞一个初始化函数,虽然麻烦,但是能保证正确,思路清晰,笨方法最有效

void set_STRU(S_STRU d, S_STRU s)
{
          d.[idname] = s.[idname];
   ... ...
}

void init_STRUS(S_STRU array[], S_STRU s, int len)
{
          int i = 0;
          for (; i < len; i++)
                    set_STRUS(array[i], s);
  
}

[[i] 本帖最后由 mik 于 2009-4-22 15:25 编辑 [/i]]

论坛徽章:
0
6 [报告]
发表于 2009-04-22 15:43 |只看该作者
可以的,这个结构没有对齐的问题

论坛徽章:
0
7 [报告]
发表于 2009-04-22 15:54 |只看该作者
C里面好像没有对齐这个概念,只有C++里面有

论坛徽章:
0
8 [报告]
发表于 2009-04-22 16:03 |只看该作者
往sendbuf里面拷贝,是不是要注意一下字节序?转成网络字节序什么的。不然要是遇上异构的系统~~~

论坛徽章:
0
9 [报告]
发表于 2009-04-22 16:08 |只看该作者
原帖由 windyrobin 于 2009-4-22 15:11 发表
不知会不会牵涉到数据对齐的问题,
struct貌似是4字节对齐的吧...


是要注意一下字节对其的问题。默认情况下32位平台是4字节,但64位平台和16位的嵌入式芯片上应该就不是了吧?

记得以前成遇到过非常SB的面试题,给一个结构体,让你填写在内存中的大小。而给的那个空,只够写一个两位数字。也不指定一下硬件平台的字长,操作系统或操作系统采用的数据模型,以及编译时是否指定了对齐选项,还有使用的什么编译器编译的(对同一个结构体编译,默认对齐情况下,32位的cl/g++编译出来的,和16位的TC编译出来的,我想那可是不一样的~~~)~~~~

[ 本帖最后由 swxlion 于 2009-4-22 16:09 编辑 ]

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
10 [报告]
发表于 2009-04-22 16:26 |只看该作者
LZ如果拷贝到sendbuf只是为了发送,根本不需要拷贝,直接用结构地址就ok了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP