gorwable array
来源:互联网 发布:金太阳教育软件下载 编辑:程序博客网 时间:2024/05/16 07:56
#include<stdio.h>#include<stdlib.h>typedef struct Nameval Nameval;struct Nameval{ char *name; int value;};struct NVtab{ int nval; int max; Nameval *nameval;}nvtab;enum{NVINIT=1,NVGROW=2};int addname(Nameval newname){ Nameval *nvp; if(nvtab.nameval==NULL) { nvtab.nameval=(Nameval*)malloc(NVINIT*sizeof(Nameval)); if(nvtab.nameval==NULL) return -1; nvtab.max=NVINIT; nvtab.nval=0; } else if(nvtab.nval>=nvtab.max) { nvp=(Nameval*)realloc(nvtab.nameval,(NVGROW*nvtab.max)*sizeof(Nameval)); if(nvp==NULL)return -1; nvtab.max*=NVGROW; nvtab.nameval=nvp; } nvtab.nameval[nvtab.nval]=newname; return nvtab.nval++;}int main(int argc,char *argv[]){ Nameval htmlchar1= { "aelig",0x00c6, }; Nameval htmlchar2= { "aacute",0x00c1, }; Nameval htmlchar3= { "acirc",0x00c2, }; addname(htmlchar1); printf("%d,%d,%s\n",nvtab.nval,nvtab.max,nvtab.nameval[nvtab.nval-1].name); addname(htmlchar2); printf("%d,%d,%s\n",nvtab.nval,nvtab.max,nvtab.nameval[nvtab.nval-1].name); addname(htmlchar3); printf("%d,%d,%s\n",nvtab.nval,nvtab.max,nvtab.nameval[nvtab.nval-1].name); return 0;}