如何将结构体转换为字符串?

Sealional 2013-11-13 09:25:20
结构体定义如下:
struct Person
{
char name[20];
int age;
};

struct Student
{
int num;
struct Person pers;
};
我声明一个结构体变量struct Student stud;
然后对stud的各个成员赋值,例如:
stud.num = 101;
memcpy(stud.pers.name,"seal",sizeof("seal"));
stud.pers.age = 20;
接下来就要将这个结构体转换为字符串,
memcpy(str,&stud,sizeof(stud));
结果不对。求大神解答。
...全文
3755 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sealional 2013-11-13
  • 打赏
  • 举报
回复
引用 5 楼 wangdahu888 的回复:
我且问撸主,什么是字符串?????????
我不懂,求大神指明。
Sealional 2013-11-13
  • 打赏
  • 举报
回复
引用 8 楼 turingo 的回复:
memcpy(str,&stud,sizeof(stud));是没有意义的语句。 [quote=引用 楼主 Sealional 的回复:] 结构体定义如下: struct Person { char name[20]; int age; }; struct Student { int num; struct Person pers; }; 我声明一个结构体变量struct Student stud; 然后对stud的各个成员赋值,例如: stud.num = 101; memcpy(stud.pers.name,"seal",sizeof("seal")); stud.pers.age = 20; 接下来就要将这个结构体转换为字符串, memcpy(str,&stud,sizeof(stud)); 结果不对。求大神解答。
[/quote]str是声明为char str[100]的。转换是肯定能转换的。只是我不知道我哪里出错了。
图灵狗 2013-11-13
  • 打赏
  • 举报
回复
memcpy(str,&stud,sizeof(stud));是没有意义的语句。
引用 楼主 Sealional 的回复:
结构体定义如下: struct Person { char name[20]; int age; }; struct Student { int num; struct Person pers; }; 我声明一个结构体变量struct Student stud; 然后对stud的各个成员赋值,例如: stud.num = 101; memcpy(stud.pers.name,"seal",sizeof("seal")); stud.pers.age = 20; 接下来就要将这个结构体转换为字符串, memcpy(str,&stud,sizeof(stud)); 结果不对。求大神解答。
Sealional 2013-11-13
  • 打赏
  • 举报
回复
引用 4 楼 wangdahu888 的回复:
[quote=引用 3 楼 Sealional 的回复:] 回复worldy:我能说你很逗么?为什么不能?
无量天尊,是撸主你太逗了......[/quote]不可能不能啊!我再去看看
引用 6 楼 suzhouxiao 的回复:
楼主啊,你的结果不对是什么意思?你是怎么验证的。 你看下面的代码, 把struct 拷贝到char* ,然后再把char* 转换到struct* ,再打印出来OK啊。 不知道你为什么这么做,不过这样做结果肯定是对的。

	struct Person
	{
		char name[20];
		int age;
	};

	struct Student
	{
		int num;
		struct Person pers;
	};

	struct Student stud;
	stud.num = 101;
	memcpy(stud.pers.name, "seal", sizeof("seal"));
	stud.pers.age = 20;
	
	char str2[100] = { 0 };

	memcpy(str2, &stud, sizeof(stud));

	struct Student stud2 = *((struct Student*)str2);
	cout << stud2.num << endl;
	cout << stud2.pers.age << endl;
	cout << stud2.pers.name << endl;
就是你这段程序一样。但是在用memcpy(str2, &stud, sizeof(stud));之后观察str2的值不对。而且下面输出的也不对。
cy2015yc 2013-11-13
  • 打赏
  • 举报
回复
楼主啊,你的结果不对是什么意思?你是怎么验证的。 你看下面的代码, 把struct 拷贝到char* ,然后再把char* 转换到struct* ,再打印出来OK啊。 不知道你为什么这么做,不过这样做结果肯定是对的。

	struct Person
	{
		char name[20];
		int age;
	};

	struct Student
	{
		int num;
		struct Person pers;
	};

	struct Student stud;
	stud.num = 101;
	memcpy(stud.pers.name, "seal", sizeof("seal"));
	stud.pers.age = 20;
	
	char str2[100] = { 0 };

	memcpy(str2, &stud, sizeof(stud));

	struct Student stud2 = *((struct Student*)str2);
	cout << stud2.num << endl;
	cout << stud2.pers.age << endl;
	cout << stud2.pers.name << endl;
  • 打赏
  • 举报
回复
我且问撸主,什么是字符串?????????
  • 打赏
  • 举报
回复
引用 3 楼 Sealional 的回复:
回复worldy:我能说你很逗么?为什么不能?
无量天尊,是撸主你太逗了......
Sealional 2013-11-13
  • 打赏
  • 举报
回复
回复worldy:我能说你很逗么?为什么不能?
Sealional 2013-11-13
  • 打赏
  • 举报
回复
而且我编写了一个用例。可以得到结构体中的num,name和age的存储空间是连续的,这样的话想来用memcpy来copy到str的时候应该不会出错才对啊!莫非是memcpy还有遇到什么就停止copy的机制?
worldy 2013-11-13
  • 打赏
  • 举报
回复
结构体是结构体,字符串是字符串怎么能这么转换?

69,368

社区成员

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

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