2012-11-26 19 views
0

我試圖給我的結構賦值。但是,我發現一些困難。我想創建一個保存用戶,標題和視圖的列表。C-指定字符的結構*

我有一個結構如下圖所示

struct table{ 
    char *user[50]; 
    char *title[50]; 
    int views; 
} 

我從一個文本文件中的信息和我想逐行讀取文本文件,並相應分配的值。

struct table *tables; 
tables = malloc(50*sizeof(struct table)); 
FILE *ptr_file; 
char *name_file="2012-11-05-13-34.txt"; //change this later 

ptr_file=fopen(name_file, "r"); 
if(!ptr_file) 
    printf("Couldn't open file %s for reading.\n", name_file); 

printf("Opened file %s for reading.\n", name_file); 

line_number = 0; 
while(fgets(buffer, sizeof(buffer), ptr_file) != NULL){ 
    if(strcmp(buffer, "") == 0) 
     return 0; 
    char *views=strtok(buffer, ","); 
    char *name=strtok(NULL, ","); 
    char *title=strtok(NULL, ","); 
    tables[line_number].views=atoi(views); 
    strcpy(tables[line_number].user, user); 
    strcpy(tables[line_number].title, title); 
    line_number++; 
} 

我得到錯誤,如char * _restricted_but參數是類型char **。我想知道是否有人可以幫我解釋一下,或者如果他們能指引我到任何地方,我都可以看到一些我可以看穿的例子。

謝謝。

回答

4

struct table不包括name成員user

此外,您還有usertitle聲明爲指針數組,但嘗試使用它們來保存字符串,而不是使用char數組。

struct table{ 
    char user[50]; 
    char title[50]; 
    int views; 
} 

- 編輯 -

如果你想保持指針數組(排序或其他),你將不得不分配內存爲每一個來存儲你的字符串。

while(fgets(buffer, sizeof(buffer), ptr_file) != NULL){ 
    if(strcmp(buffer, "") == 0) 
     return 0; 
    char *views=strtok(buffer, ","); 
    char *name=strtok(NULL, ","); 
    char *title=strtok(NULL, ","); 
    tables[line_number].views=atoi(views); 
    tables[line_number].user[0] = strdup(user); // 
    tables[line_number].title[0] = strdup(title);// 
    line_number++; 
} 
+0

對不起,我改名爲用戶。我想保留這些作爲char *指針,因爲我將在以後使用這些進行排序。 – user1709294

+0

@ user1709294請參閱編輯 – Musa