C99_变长结构体实现

Posted lytwajue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C99_变长结构体实现相关的知识,希望对你有一定的参考价值。

/*************************************************************************
    > File Name: C99_lengthenStruct.c
    > Author: zshh0604
    > Mail: [email protected] 
    > Created Time: 2014年10月16日 星期四 17时19分35秒
 ************************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/***
 *   C99中变成结构的实现。
 *   
 *   一:变长结构体实现的两个原理。
 *		1.结构体的地址空间是连续的。
 *		2.数组的地址空间也是连续的。
 *	
 *	二: 变长结构体的表示方法例如以下。
 *	    1.	typedef struct
 *			{
 *				int data1;
 *				char data2[20];
 *				int data3[0];
 *			} data;
 *		2.当中data3[0]必须是在结构体的最后的一个元素。
 *	三:
 *		Demo说明怎样进行数据存取。

* */ /** * 用来測试变长结构体的数据结构。 */ typedef struct { int data1; char data2[20]; int data3[0]; }data; /*** * 測试将结构体存放到可变结构体中 */ typedef struct { int data1; char data2[30]; char data3[0]; }datas; /* *測试将people结构体存放到datas中。 */ typedef struct { int id; char name[30]; }people; /*** * 初始可变长结构体。 */ void init_data(void) { data * d = NULL; int i = 0; d = malloc(sizeof(data)+sizeof(int)*30); if(d== NULL) { printf("分配地址空间失败\n"); return; } d->data1 = 10; strncpy(d->data2,"hello world",strlen("hello world")+1); for(i=0;i<30; i++) { d->data3[i] = i; printf("d->data3[%d] = %d\n",i,d->data3[i]); } } void init_datas(void) { datas * d = NULL; people p; people *p1; d = malloc(sizeof(datas) + sizeof(people)); p.id = 10; strncpy(p.name,"gameone",strlen("gameone")+1); memcpy(d->data3,&p,sizeof(people)); p1 = (people*) d->data3; printf("p1.id = %d\n", p1->id); printf("p1.name = %s\n", p1->name); return; } void main(void) { init_data(); init_datas(); } 转载请注明出处 http://blog.csdn.net/shaohuazuo/article/details/40159531


以上是关于C99_变长结构体实现的主要内容,如果未能解决你的问题,请参考以下文章

Golang PrintfSprintf Fprintf 格式化

预定义宏__func___Pragma变长参数宏定义以及__VA_ARGS__

C语言怎样定义变长数组

C89,C99: C数组&结构体&联合体快速初始化

手把手写C++服务器(10):结构体struct常用技术之柔性数组字节对齐__attribute__

KEIL, MDK 关于C99结构体变量初始化