带有分配字符的C-结构*

时间:2012-11-26 06:34:20

标签: c pointers struct

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

我有一个如下所示的结构

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 **。我想知道是否有人可以帮我向我解释这个问题,或者他们是否可以将我引导到任何地方,我可以得到一些我可以看到的例子。

感谢。

1 个答案:

答案 0 :(得分: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++;
 }