C语言,结构体用数组memcpy的问题

定义结构体structaaa{charsz1[5];charsz2[10];};structbbb{charsz1[5];charsz2[10];charc1;};定义一... 定义结构体
struct aaa
{
char sz1[5];

char sz2[10];

};
struct bbb
{
char sz1[5];

char sz2[10];

char c1;

};
定义一个数组:char szBuf[100];

问题:
假设szBuf[0]~szBuf[4]存放的是我要赋给结构体aaa中的sz1的数据,szBuf[5]~szBuf[14]存放的是我要赋值给aaa中sz2的数据,那么我可以用memcpy(&aaa, szBuf, sizeof(struct aaa))吗???

又假设zBuf[0]~szBuf[4]存放的是我要赋给结构体bbb中的sz1的数据,szBuf[5]~szBuf[14]存放的是我要赋值给bbb中sz2的数据,szBuf[15] = ‘0‘存放的是要给bbb中c1的,那么我可以用memcpy(&bbb, szBuf, sizeof(struct bbb))吗???

这个问题一直困扰我,请大神解答一下,急~~
展开
 我来答
百度网友6dc5d8b
推荐于2016-04-14 · TA获得超过721个赞
知道小有建树答主
回答量:390
采纳率:100%
帮助的人:276万
展开全部
可以,如果结构体中全是char型数据一点问题都没有

但如果结构体内有其他类型的数据,就有问题了,因为会涉及到内存对齐问题

你要弄清楚这个概念,你需要清楚的知道80X86CPU的内存对齐规则(对齐其实是编译器规定的,但是为了CPU高效访问内存,编译器一般都会按照CPU 的规则去对齐)

如果你没指定#pragma pack
那么32位windows下的编译器默认是4字节对齐的

具体怎么对齐的比较复杂,自己参考别的资料吧。。

我只想说,如果 结构体内全身char型的,你尽管用你的方法去做好了,一点问题都没有
追问
只要都是char型就都可以吗,不管是char数组还是char字符,是吗?
追答
是的,只要是x86下的C编译器,都可以,单片机上我就不知道了
X86下的 你不需要指定#pragma pack 里面如果都是char类型的,无论数组与否(一个数组就相当于多个char)都是紧密连着的
lkjhggv
2013-08-31 · TA获得超过3063个赞
知道大有可为答主
回答量:1550
采纳率:66%
帮助的人:1317万
展开全部
和编译器有关,一般不推荐这样做
结构体成员之间在内存空间不一定是连续的,其中间可能包含内存对齐空间以提高CPU的访问效率
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhangqingxian
2013-08-31 · TA获得超过268个赞
知道小有建树答主
回答量:362
采纳率:0%
帮助的人:308万
展开全部
应该对结构内的成员一个个单独操作,写质量高的代码。也许你在某个环境下测试通过,但是给程序留下了隐患 。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-31
展开全部
可能会有对齐的问题,在代码里加上#pragma pack (1)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式