2012-12-12 16 views
1

我想從文件寫入到C中的結構。每當我嘗試在結構中分配值時它給我錯誤:賦值中的不兼容類型。從文件到結構在C

我的結構是這樣的:

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

基本上我想打開文件,然後指定個別行的結構不同的價值。即。第一行在文件 - > 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; 
     } 
    } 
}  

}

誰能幫助我?

+0

查看strcpy函數 –

回答

3

根本原因:

你不能做到這一點:

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

您正在嘗試使用分配任務不能完成數組,數組需要被複制。編譯器正確地報告錯誤:

error: incompatible types in assignment 

,因爲確實是類型你想分配是不相容的。

解決方案:

相反,你需要使用strcpy和複製的字符數組,而不是將它們分配。

+0

謝謝,你是救命恩人! – Shepard

2

不能分配給像在C數組:,則需要將值複製到使用的複印功能一個數組:

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

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

另一個要考慮的,您的代碼中的文字編號爲79不止幾次,它似乎表示所有數組的大小。這將是簡單的定義可用於所有它們的數組長度:讀你的fgets和最終strncpy()電話時

#define LENGTH 79 

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

你甚至可以使用這個常量:

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

我不建議使用strncpy()功能。它有它的怪癖,不會追加尾隨\0。您必須使用strcpy()將字符數組(字符串)從一個位置複製到另一個位置。