首页 > 其他 > 详细

结构体转化成字符数组

时间:2014-09-02 14:18:04      阅读:325      评论:0      收藏:0      [点我收藏+]

昨天晚上在解决通过socket发送结构体的问题的时候,知道了可以将结构体先转化成字符串的形式再发送,但今天之前一直有个疑问没有解决(为了方便描述,去掉socket部分),首先看下代码:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

typedef struct info
{
	char name[5];
	char num[10];
}INFO;

int main()
{
	INFO info;
	char buf[15];
	strcpy(info.name, "won");
	strcpy(info.num, "12345");

	memcpy(buf, &info, sizeof(info));
	printf("%s\n", buf);
	printf("%d\n", (int)strlen(buf));

	exit(0);
}

编译运行之后,发现只打印了第一个变量的值“won”,而“12345”没有打印出来。而且buf的长度是3而不是8。这是为什么呢?难道结构体转化成字符串时候没有完全转化?

今天早上突然想起,printf()函数和strlen()都是遇到结束符就返回的!!!其实buf数组里的内容是“won\012345\0”。所以只能打印出“won”。

为了证实这一想法,可以将打印语句换成:

int i = 0;
while(i < 15)
{
	printf("%c", buf[i]);
	i++;
}
printf("\n");

编译运行后打印"won12345"。


还有一个更好的办法,就是再将字符串转化成对应的结构体(这才是最终目的啊),下面是代码:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

typedef struct info
{
	char name[5];
	char num[10];
}INFO;

int main()
{
	INFO info, info1;
	char buf[15];
	strcpy(info.name, "won");
	strcpy(info.num, "12345");

	memcpy(buf, &info, sizeof(info));

	memcpy(&info1, buf, sizeof(buf));
	printf("%s,%s\n", info1.name, info1.num);

	exit(0);
}
通过memcpy(&info1, buf, sizeof(info)); 将字符数组buf的内容转化成结构体info1,编译运行后的结果是:"won,12345"。


成功!



结构体转化成字符数组

原文:http://blog.csdn.net/wonxxx/article/details/39003575

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!