C:如何修改结构中字符串的最大大小?

0 c struct pointers dynamic-memory-allocation

该练习提供了一个简单的程序来创建数据库,该程序转向以下结构

struct Address {
  int id;
  int set;
  char name[MAX_DATA];
  char email[MAX_DATA];
};
Run Code Online (Sandbox Code Playgroud)

我被要求修改代码,以便我可以作为参数传递给程序的最大长度 .name.email.当然,现在,如果不是将其定义MAX_DATA为宏而是将其作为全局变量使用,我会得到错误:在文件范围内修改了'name'.

然后我尝试创建不同的if循环,旨在通过重新定义来传递MAX_DATA值struct Address,例如:

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;
}
Run Code Online (Sandbox Code Playgroud)

DatabaseSetDatabaseWrite(这在工作struct Connection,涉及到另一个struct Database,谁最终直接关系到struct Address)忽略的新长度nameemail.

编辑:谢谢.

谢谢大家的意见和答案,你真的帮助我完成了练习和我的一般未知的C.

use*_*738 5

  struct Address {
    int id;
    int set;
    char *name;
    char *email;
  };
Run Code Online (Sandbox Code Playgroud)

然后,在动态分配内存name,并email根据您的MAXDATA输入.

然后你这样做struct Address p.

p.name = malloc(MAXDATA);
if( p.name == NULL ){
   fprintf(stderr,"%s\n","Error in memory allocation");
   exit(1);
}
Run Code Online (Sandbox Code Playgroud)

然后当你完成它的工作

free(p.name);
Run Code Online (Sandbox Code Playgroud)

如果您为内存分配内存,email则必须free()按照前面所示的方式调用内存.