练习提供了一个简单的程序来创建数据库,这个程序转向了以下结构
struct Address {
int id;
int set;
char name[MAX_DATA];
char email[MAX_DATA];
};
我要求修改代码,以便我可以将.name
和.email
的最大长度作为参数传递给程序。现在,当然,如果不是将MAX_DATA
定义为宏而是将其作为全局变量使用,我会得到错误:可变修改的名称'在文件范围。
然后我尝试创建不同的if循环,旨在通过重新定义struct Address
来传递MAX_DATA值,例如:
if(argc > 6) {
int maxdata = atoi(argv[6]);
struct Address {
int id;
int set;
char name[maxdata];
char email[maxdata];
};
DatabaseSet(conn, id, argv[4], argv[5]);
DatabaseWrite(conn);
break;
}
但是DatabaseSet
和DatabaseWrite
(适用于struct Connection
与另一个struct Database
相关,最终与struct Address
直接相关)会忽略新的长度name
和email
。
谢谢大家的意见和答案,你真的帮助我完成了这项练习,并且还有我未知的C语。
答案 0 :(得分:5)
struct Address {
int id;
int set;
char *name;
char *email;
};
然后根据您的name
输入在email
和MAXDATA
动态分配内存。
然后执行此操作struct Address p
。
并且
p.name = malloc(MAXDATA);
if( p.name == NULL ){
fprintf(stderr,"%s\n","Error in memory allocation");
exit(1);
}
然后当你完成它的时候
free(p.name);
如果您为email
分配内存,则必须以正确的方式调用free()
,如前所示。 子>