关于强制转换

xuexibiji20100227 2011-09-05 12:59:18
如果有这样的结构体rule,想要强制转化为char *,请问可行吗?有什么要注意的地方?
转化的char *, 再转回到struct rule,能打印出对应的数据吗?我试了不行的,不知道该如何改

typedef struct test test;
typedef struct rule rule;
struct test
{
int a;
char *param;
};
test array[10];
struct rule
{
test *first;
int b;
rule *msr;
};
int main(int argc, char **argv)
{
rule *sec_rule;
char *s1 = "hello";
char *s2;
s2 = (char *)malloc(3);
memcpy(s2, s1, 2);/*只要前面的he*/
sec_rule = (rule *)malloc(sizeof(rule));
memset(sec_rule, 0, sizeof(rule));
memset(array, 0, 10*sizeof(test));
sec_rule->first = array;
(sec_rule->first).a = 1;
(sec_rule->first).param = (char *)malloc(strlen(s1) + 1);
memcpy((sec_rule->first).param, s1, strlen(s1));
(sec_rule->first)[1].a = 2;
(sec_rule->first)[1].param = (char *)malloc(strlen(s2) + 1);
memcpy((sec_rule->first[1]).param, s2, strlen(s2));
sec_rule->b = 1;
char *temp = (char *)sec_rule;/*在这强制转化*/
/*free暂时不管啦,退出时自己free吧*/
return 0;
}

只有35分了。。。。谢谢!
...全文
102 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuexibiji20100227 2011-09-10
  • 打赏
  • 举报
回复
说实话,强制转化我没考虑什么对齐时的填充,都是编译器对结构体做的字节对齐,大小端也没有考虑的,因为我只是在本机上运行,我不进行网络传输,也不换机器。
就一个问题:
强制转换后,不能把char型指针指向的内容复制到另一个char型指针分配的地址。
如果这样做,就不能再强制转换回来了。
AnYidan 2011-09-05
  • 打赏
  • 举报
回复
可以,注意对齐时的填充,还有就是大小端
date_1002 2011-09-05
  • 打赏
  • 举报
回复
学习一下
xuexibiji20100227 2011-09-05
  • 打赏
  • 举报
回复
好的,谢谢,我就是转了存为char,要用的时候再转化为结构体。只是转得时候出了问题,我再去调调
追求执着 2011-09-05
  • 打赏
  • 举报
回复

学习,我对内型转换一直很模糊!
hu7324829 2011-09-05
  • 打赏
  • 举报
回复
强转肯定是可以的,而且如果你知道结构体每个元素的位置,那使用起来会更灵活.
pathuang68 2011-09-05
  • 打赏
  • 举报
回复
当然可以强转。
  • 打赏
  • 举报
回复
强制转换是可以的,但本质上很危险
你可以只是传递结构体的引用就可以,也很快且不占用结构体那么大的内存
luciferisnotsatan 2011-09-05
  • 打赏
  • 举报
回复
可以强转,只要你指向的位置正确
jackyjkchen 2011-09-05
  • 打赏
  • 举报
回复
转是可以转,关键看你转了以后干什么,如果说用于io(文件、网络),安全上没问题,但是char *param;是个对内存,里面内容和结构体的地址不在一块……

69,368

社区成员

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

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