【问题标题】:From file to structure in CC语言从文件到结构
【发布时间】:2012-12-12 03:56:42
【问题描述】:

我正在尝试在 C 中从文件写入结构。每当我尝试在结构中分配值时,都会出现错误:分配中的类型不兼容。

我的结构是这样的:

struct competition{
char eventTitle[79];
char date[79];
char time[79];
};

基本上我想打开文件并将单个行分配给结构中的不同值。 IE。文件中的第一行 -> eventTitle,第二行 -> 日期,第三行 -> 时间。

这是我尝试分配它的方式:

FILE *naDaSt;
char *mode = "r";
int lines = 0;
char line[79], current[79];


naDaSt = fopen(nameDateStart, mode);
if(naDaSt == NULL){
    printf("Can't find the files.");
    exit(1);
}else{
    struct competition comp, *p;
    p = ∁
    while(fgets(line, 79, naDaSt)){
        lines++;
        if(lines == 1){
            p->eventTitle= line;
        }
        if(lines == 2){
            p->date = line;
        }
        if(lines == 3){
            p->time = line;
        }
    }
}    

}

谁能帮帮我?

【问题讨论】:

    标签: c file pointers io structure


    【解决方案1】:

    根本原因:

    你不能这样做:

            p->eventTitle = line;
            p->date = line;
            p->time = line;
    

    您正在尝试使用无法完成的赋值来分配数组,需要复制数组。编译器正确地报错:

    error: incompatible types in assignment
    

    因为您尝试分配类型确实不兼容。

    解决方案:

    相反,您需要使用strcpy 并复制字符数组而不是分配它们。

    【讨论】:

      【解决方案2】:

      您不能像在 C: 中那样分配给数组,您需要使用复制函数之一将值复制到数组中:

      strcpy()
      strncpy()  // This one is better to use
      

      http://linux.die.net/man/3/strcpy

      要考虑的另一件事是,您的代码中多次出现文字数字79,它似乎表示所有数组的大小。定义一个可以用于所有这些的数组长度会更简单:

      #define LENGTH 79
      
      struct competition
      {
        char eventTitle[LENGTH];
        char date[LENGTH];
        char time[LENGTH];
      };
      

      您甚至可以在读取 fgets 和最终的 strncpy() 调用时使用此常量:

      while(fgets(line, LENGTH, naDaSt))
      strncpy( ..., ..., LENGTH);
      

      【讨论】:

        【解决方案3】:

        我不推荐使用strncpy() 函数。它有其怪癖,不附加尾随\0。您必须使用strcpy() 将字符数组(字符串)从一个位置复制到另一个位置。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-19
          • 2015-06-07
          相关资源
          最近更新 更多