结构体转化成字符数组

昨天晚上在解决通过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"。

成功!

时间: 2024-10-07 11:04:07

结构体转化成字符数组的相关文章

C++/C#结构体转化-二维数组-bytes To Strings

C++结构体 typedef struct VidyoClientRequestGetWindowsAndDesktops_ { /*! The number of application windows currently open */ VidyoSizeT numApplicationWindows; /*! List of open application window names (UTF-8) (Localized) */ char appWindowName[MAX_NUM_APP

读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组

原文链接:C语言结构体里的成员数组和指针 复制如下: 单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如下.我觉得好多人对这段代码的理解还不够深入,所以写下了这篇文章. 为了方便你把代码copy过去编译和调试,我把代码列在下面: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h>

HTML5将图片转化成字符画

HTML5将图片转化成字符画 字符画大家一定非常熟悉了,那么如何把一张现有的图片转成字符画呢?HTML5让这个可能变成了现实,通过canvas,可以很轻松实现这个功能.其实原理很简单:扫描图片相应位置的像素点,再计算出其灰度值,根据灰度值的大小,分别用字符#*+“和空格来填充.下面是源码:HTML:一个canvas元素#cv,一个字符画容器#txt . 1 <canvas id="cv">fuck ie</canvas> 2 <div id="t

如何将特殊符号转化成字符编码!

有时候使用一些小图标的时候,通常情况下,都是用的雪碧图将他们放在一起,然后通过背景调用,但是很多图标都是很简单的字符图标,却往往多增加了一些请求,大小也增加了(图片肯定比字符要大):为什么就不能将这些简单的字符图标用字符编码的形式来体现呢?这样性能不是更好吗?至少是一个网站优化的方向啊!所以我说干就干,在网上找找吧!照理说我这想法应该很多人都想到了啊,但是网上却很难找到把一些常用的字符图标转化为字符编码的文章或者是例子,然道是太简单了?还是说大神都不屑于做这样的事情!好吧,这叫我们这些菜鸟怎么办

NSValue (将结构体包装成NSValue)

将结构体包装成 NSValue ,并取出结构体 1 NSRect rect = {0, 0, 200,200}; 2 NSValue *rectValue = [NSValue valueWithBytes:&rect objCType:@encode(NSRect)]; 3 NSRect newRect; 4 [rectValue getValue:&newRect]; 5 NSLog(@"%f,%f,%f,%f",newRect.origin.x,newRect.o

JavaSE8基础 String toCharArray 字符串转换成字符数组

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        code: package jizuiku.t01; public class Demo02 { public static void main(String[] args) { String str = "JavaSE8你好"; char[] c = str.toCharArray();//字符串转换成字

结构体指针内存——指针数组——字符串指针内存申请

前几天用的结构体,结构体内还包含有结构体指针和数组以及指向字符串的指针,发现自己对这方面的东西还很容易犯错,故现在讲其中容易出错的地方写出来,分享给大家也方便自己日后查看. typedef struct { char name[50]; char job[50]; int age; int people_id; } peopleInfo; typedef struct { bool typeAdd; bool typeDel; int length; peopleInfo *info; char

C语言结构体及函数传递数组参数示例

注:makeSphere()函数返回Sphere结构体,main函数中,调用makeSphere()函数,传递的第一个参数为数组,传递的数组作为指针. 版权声明:本文为博主原创文章,未经博主允许不得转载.

C语言结构体及函数传递数组參数演示样例

注:makeSphere()函数返回Sphere结构体,main函数中.调用makeSphere()函数,传递的第一个參数为数组,传递的数组作为指针.