2015-11-09 247 views
0

我想從文本文件逐行讀取並將值放入結構中。結構和指針在C

我輸入的是:

名1名2 2015年1月1日。 。

我在下面寫的代碼正在工作,但所有數組都具有相同的值(文件的最後一行)。我認爲這是因爲我的元素只是應付指針?但仍然找不到解決方案?也許有人快速尋找幫助。

int main() { 

struct table { 
    char *nachname; 
    char *vorname; 
    char *tag; 
    char *monat; 
    char *jahr; 
    int q; 
}; 

int i; 
char *file = "OefbTeam1neu.dat", *token; 
int lines = getLineCount(file); 
FILE *readtxt = fopen(file, "r"); 
struct table team[lines]; 

//char vn[lines][100], nn[lines][100], geb[lines][100]; // array of characters in array of strings 

rewind(readtxt); 

for(i=0 ; i < lines ; i++) { 

    char vn[100], nn[100], geb[100]; 
    char *t , *m , *y; 
    int iread = fscanf(readtxt, "%s %s %s \n", nn, vn, geb); 

    token = strtok(geb, "."); 

    while(token != NULL) { 
     t = token; 
     token = strtok(NULL, "."); 
     m = token; 
     token = strtok(NULL, "."); 
     y = token; 
     token = strtok(NULL, "."); 
    } 

    team[i].nachname = nn; 
    team[i].vorname = vn; 
    team[i].tag = t; 
    team[i].monat = m; 
    team[i].jahr = y; 
    team[i].q = i; 

    //printf("%s %s %s %s %s \n", team[i].nachname, team[i].vorname, team[i].tag, team[i].monat, team[i].jahr); 
} 
fclose(readtxt); 
} 

回答

0

因爲你使用相同的陣列(VN,NN,GEB)對於每次迭代,所以在表結構中的字段都具有相同的地址,所以他們都指向同一個字符串。每次迭代時,都會將文件中的下一行讀入這些緩衝區,因此這些數組的內容會讀取最後一行。

0

您對所有team[]元素使用相同的臨時變量..因此所有team[]元素指向最後一項。

你需要有獨立的內存中爲每個team[]項目,例如在你的結構:

struct table { 
    char nachname[100]; 
    char vorname[100]; 
    char tag[100]; 
    char monat[100]; 
    char jahr[100]; 
    int q; 
}; 

而且複製的臨時字符串緩衝區與strcpy的..

strcpy(team[i].nachname, nn); 
strcpy(team[i].vorname, vn); 
strcpy(team[i].tag, t); 
strcpy(team[i].monat, m); 
strcpy(team[i].jahr, y); 

再見!

+0

感謝您的幫助! – coo12