如何用c语言给定义过的结构体增加成员

jyxuan94 2016-03-21 03:05:56
话说是这样的,用c语言做个仿mysql程序,但是在建表的时候结构体中成员的数量是要用户输入的,数据也要用户输出,用链表的话可以做到到单个成员对应下的元素的增删改,但是结构体成员不知道怎么增删,希望大家能给个思路或者代码;
...全文
2236 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 4 楼 u013179272 的回复:
请问,如果这样 struct student{ char name[20]; int age; char sex; int weight; void *attr; }; 给这个里面增加N个不确定的变量, 其他地方给这N个变量赋值,怎么处理呢?
用版主说的方法2,void*链接过去是最好的方法。 他的方法3会产生4200警告,不是最好的方案。
hacklinshell 2016-05-18
  • 打赏
  • 举报
回复
请问,如果这样 struct student{ char name[20]; int age; char sex; int weight; void *attr; }; 给这个里面增加N个不确定的变量, 其他地方给这N个变量赋值,怎么处理呢?
小灸舞 版主 2016-03-21
  • 打赏
  • 举报
回复
引用 2 楼 jyxuan94 的回复:
[quote=引用 1 楼 qq423399099 的回复:] 有几个思路,LZ可以参考下 1.添加一些多余的成员(也就是说,不管是否需要,都添加进去) 2.另外添加指针(如void *, 根据需要动态产生attr的结构)

struct student{ 
char name[20]; 
int age; 
char sex; 
int weight; 
void *attr; 
}; 
3.结构体变长的妙用——0个元素的数组

typedef struct st_type 
{ 
int nCnt; 
int item[]; 
}type_a; 
这样我们就可以定义一个可变长的结构,用sizeof(type_a)得到的只有4,就是sizeof(nCnt)=sizeof(int)那个0个元素的数组没有占用空间,而后我们可以进行变长操作了。

type_a *p = (type_a*)malloc(sizeof(type_a)+100*sizeof(int)); 
这样我们就产生了一个长为100的type_a类型的东西用p-> item[n]就能简单地访问可变长元素,原理十分简单,分配了比sizeof(type_a)多的内存后int item[];就有了其意义了,它指向的是int nCnt;后面的内容,是没有内存需要的,而在分配时多分配的内存就可以由其来操控,是个十分好用的技巧。 注:如果可以用C++,不妨可以用多态试试
谢谢大大,有几个问题想问下,因为大多时候录入的都是字符串,而c没有string类型,多数的时候用的是二维数组,或者指针数组,那么方法2是不是改成 void *arr[100],如果是,赋值的时候是*(arr+i)的形式还是a[i]比较好 方法三是不是这样就可以了:
typedef struct st_type 
{ 
int nCnt; 
char item[][100]; 
}type_a; 
type_a *p = (type_a*)malloc(sizeof(type_a)+100*sizeof(int)); 
[/quote] 方法2:可以用指针数组的形式void *arr[100];

type_a a;
a.arr[0] = (char *)("asdads");
cout << (char *)a.arr[0] << endl;
方法3: type_a *p = (type_a *)malloc(sizeof(type_a) + 5 * 100 * sizeof(char)); strcpy(p->item[0], "asd"); cout << p->item[0] << endl;
jyxuan94 2016-03-21
  • 打赏
  • 举报
回复
引用 1 楼 qq423399099 的回复:
有几个思路,LZ可以参考下 1.添加一些多余的成员(也就是说,不管是否需要,都添加进去) 2.另外添加指针(如void *, 根据需要动态产生attr的结构)

struct student{ 
char name[20]; 
int age; 
char sex; 
int weight; 
void *attr; 
}; 
3.结构体变长的妙用——0个元素的数组

typedef struct st_type 
{ 
int nCnt; 
int item[]; 
}type_a; 
这样我们就可以定义一个可变长的结构,用sizeof(type_a)得到的只有4,就是sizeof(nCnt)=sizeof(int)那个0个元素的数组没有占用空间,而后我们可以进行变长操作了。

type_a *p = (type_a*)malloc(sizeof(type_a)+100*sizeof(int)); 
这样我们就产生了一个长为100的type_a类型的东西用p-> item[n]就能简单地访问可变长元素,原理十分简单,分配了比sizeof(type_a)多的内存后int item[];就有了其意义了,它指向的是int nCnt;后面的内容,是没有内存需要的,而在分配时多分配的内存就可以由其来操控,是个十分好用的技巧。 注:如果可以用C++,不妨可以用多态试试
谢谢大大,有几个问题想问下,因为大多时候录入的都是字符串,而c没有string类型,多数的时候用的是二维数组,或者指针数组,那么方法2是不是改成 void *arr[100],如果是,赋值的时候是*(arr+i)的形式还是a[i]比较好 方法三是不是这样就可以了:
typedef struct st_type 
{ 
int nCnt; 
char item[][100]; 
}type_a; 
type_a *p = (type_a*)malloc(sizeof(type_a)+100*sizeof(int)); 
小灸舞 版主 2016-03-21
  • 打赏
  • 举报
回复
有几个思路,LZ可以参考下 1.添加一些多余的成员(也就是说,不管是否需要,都添加进去) 2.另外添加指针(如void *, 根据需要动态产生attr的结构)

struct student{ 
char name[20]; 
int age; 
char sex; 
int weight; 
void *attr; 
}; 
3.结构体变长的妙用——0个元素的数组

typedef struct st_type 
{ 
int nCnt; 
int item[]; 
}type_a; 
这样我们就可以定义一个可变长的结构,用sizeof(type_a)得到的只有4,就是sizeof(nCnt)=sizeof(int)那个0个元素的数组没有占用空间,而后我们可以进行变长操作了。

type_a *p = (type_a*)malloc(sizeof(type_a)+100*sizeof(int)); 
这样我们就产生了一个长为100的type_a类型的东西用p-> item[n]就能简单地访问可变长元素,原理十分简单,分配了比sizeof(type_a)多的内存后int item[];就有了其意义了,它指向的是int nCnt;后面的内容,是没有内存需要的,而在分配时多分配的内存就可以由其来操控,是个十分好用的技巧。 注:如果可以用C++,不妨可以用多态试试

70,023

社区成员

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

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