【问题标题】:C- Structs with Assigning Char *C- 带有分配字符的结构 *
【发布时间】:2023-04-02 14:36:02
【问题描述】:

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

我有一个如下所示的结构

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** 类型。我想知道是否有人可以帮助向我解释这一点,或者他们是否可以将我带到任何我可以找到一些我可以查看的示例的地方。

谢谢。

【问题讨论】:

    标签: c pointers struct


    【解决方案1】:

    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++;
     }
    

    【讨论】:

    • 对不起,我把名字改成了用户。我想将它们保留为 char * 指针,因为稍后我将使用它们进行排序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 2021-11-30
    • 2015-04-10
    • 2013-08-17
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多