1

我正在尝试在 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;
        }
    }
}    

}

有人可以帮我吗?

4

3 回答 3

3

根本原因:

你不能做这个:

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

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

error: incompatible types in assignment

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

解决方案:

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

于 2012-12-12T03:59:17.167 回答
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);
于 2012-12-12T04:00:23.190 回答
0

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

于 2012-12-12T04:02:50.277 回答