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

时间:2017-12-14 17:15:37

标签: c pointers struct dynamic-memory-allocation

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

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;
}

但是DatabaseSetDatabaseWrite(适用于struct Connection与另一个struct Database相关,最终与struct Address直接相关)会忽略新的长度nameemail

编辑:谢谢。

谢谢大家的意见和答案,你真的帮助我完成了这项练习,并且还有我未知的C语。

1 个答案:

答案 0 :(得分:5)

  struct Address {
    int id;
    int set;
    char *name;
    char *email;
  };

然后根据您的name输入在emailMAXDATA动态分配内存。

然后执行此操作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(),如前所示。