0

我正在尝试将值分配给我的结构。但是,我发现了一些困难。我想创建一个包含用户、标题和视图的列表。

我有一个如下所示的结构

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

1 回答 1

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++;
 }
于 2012-11-26T06:40:42.097 回答