C:如何修改结构中字符串的最大大小?
C: How to modify the max size of a string in a struct?
练习给出了一个创建数据库的简单程序,这个程序围绕着下面的结构
struct Address {
int id;
int set;
char name[MAX_DATA];
char email[MAX_DATA];
};
我被要求修改代码,以便我可以将 .name
和 .email
的最大长度作为参数传递给程序。现在,当然,如果我没有将 MAX_DATA
定义为宏,而是将其作为全局变量使用,我会得到 error: variable modified 'name' at file scope.
然后我尝试创建不同的 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 Database
相关的 struct Connection
上工作,后者最终直接与 struct Address
相关)忽略了name
和 email
.
的新长度
编辑:谢谢。
谢谢大家的评论和回答,你们真的帮助我完成了练习,也帮助了我对 C 的普遍理解。
struct Address {
int id;
int set;
char *name;
char *email;
};
然后根据您的 MAXDATA
输入在 name
和 email
中动态分配内存。
然后你这样做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()
。
练习给出了一个创建数据库的简单程序,这个程序围绕着下面的结构
struct Address {
int id;
int set;
char name[MAX_DATA];
char email[MAX_DATA];
};
我被要求修改代码,以便我可以将 .name
和 .email
的最大长度作为参数传递给程序。现在,当然,如果我没有将 MAX_DATA
定义为宏,而是将其作为全局变量使用,我会得到 error: variable modified 'name' at file scope.
然后我尝试创建不同的 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 Database
相关的 struct Connection
上工作,后者最终直接与 struct Address
相关)忽略了name
和 email
.
编辑:谢谢。
谢谢大家的评论和回答,你们真的帮助我完成了练习,也帮助了我对 C 的普遍理解。
struct Address {
int id;
int set;
char *name;
char *email;
};
然后根据您的 MAXDATA
输入在 name
和 email
中动态分配内存。
然后你这样做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()
。