请教一个结构体复制的问题.

winner8080 2010-06-17 02:59:40
有如下的结构体:


typedef struct REMAIN_TEXT_INFO_T_tag
{
SINT16 remain_text_number;
BOOL is_unicode;
}REMAIN_TEXT_INFO_T;
static REMAIN_TEXT_INFO_T g_remain_text_info = {0x00};


//现在需要一个函数,就是把这里的g_remain_text_info 复制给传入的那个参数,具体如下:
void sms_write_get_remain_text_info(REMAIN_TEXT_INFO_T *text_info)
{
memcpy(&text_info, &g_remain_text_info, sizeof(REMAIN_TEXT_INFO_T));
}



函数中复制一个结构体这样写有隐患吗,
记得之前有个文章说考虑到内存对齐等问题,编译器有可能会做优化,所以这样复制在不同的编译器下会有隐患.

请高手出来说说.

...全文
366 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoqiao_82 2010-06-18
  • 打赏
  • 举报
回复
请教:
为什么不能这样写呢?
*text_info = g_remain_text_info;
dzcst 2010-06-18
  • 打赏
  • 举报
回复
text_info 是一个指针地址,指向的是和 g_remain_text_info不同的内存块,所有要通过内存拷贝,不能直接赋值
ForestDB 2010-06-18
  • 打赏
  • 举报
回复
没问题。
mikithebest 2010-06-18
  • 打赏
  • 举报
回复
应该没什么问题吧?
qiang81020 2010-06-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 winner8080 的回复:]
有如下的结构体:

C/C++ code

typedef struct REMAIN_TEXT_INFO_T_tag
{
SINT16 remain_text_number;
BOOL is_unicode;
}REMAIN_TEXT_INFO_T;
static REMAIN_TEXT_INFO_T g_remain_text_info = {……
[/Quote]

memcpy(.....
谁复制给谁???
似水流年__ 2010-06-17
  • 打赏
  • 举报
回复
是啊 目标目的是一样的 所以都对的

可以用pack指令 设定对齐粒度
jvs 2010-06-17
  • 打赏
  • 举报
回复
同一个结构体copy没有问题的
alicktony 2010-06-17
  • 打赏
  • 举报
回复
同一个结构体copy没有问题的
cattycat 2010-06-17
  • 打赏
  • 举报
回复
同类型的没问题。
winner8080 2010-06-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 huanmie_09 的回复:]
http://msdn.microsoft.com/en-us/library/dswaw1wk%28VS.80%29.aspx
memcpy(&text_info, &g_remain_text_info, sizeof(REMAIN_TEXT_INFO_T));
-->
memcpy(text_info, &g_remain_text_info, sizeof(R……
[/Quote]

呵呵.
我竟然写错了.
谢谢了.
selooloo 2010-06-17
  • 打赏
  • 举报
回复
可以自己自己设定对齐字节,如下
#pragma pack(8)
一般编译器默认都是8
东莞某某某 2010-06-17
  • 打赏
  • 举报
回复
你这里的目标结构和源结构都是同一种类型,无论如何,他们的内存分布总是一样的。
zjf30366 2010-06-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pengzhixi 的回复:]
只要你的text_info是一个有效的指针指向的内存确实能够容下一个REMAIN_TEXT_INFO_T类型的结构体的话就没问题
[/Quote]
pengzhixi 2010-06-17
  • 打赏
  • 举报
回复
只要你的text_info是一个有效的指针指向的内存确实能够容下一个REMAIN_TEXT_INFO_T类型的结构体的话就没问题
huanmie_09 2010-06-17
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/en-us/library/dswaw1wk%28VS.80%29.aspx
memcpy(&text_info, &g_remain_text_info, sizeof(REMAIN_TEXT_INFO_T));
-->
memcpy(text_info, &g_remain_text_info, sizeof(REMAIN_TEXT_INFO_T));
d741963250 2010-06-17
  • 打赏
  • 举报
回复
其实他们是相同类型的结构体,应该不会存在隐患。。如果是不同类型的结构体变量,也可以赋值,但是隐患很多。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧