【问题标题】:Scanning into structs扫描到结构
【发布时间】:2015-03-09 20:02:10
【问题描述】:

我想最终将文件中的字符串插入到结构中的元素中,但无法正确处理。你能看出这里有什么问题吗?

int main()
{
    FILE *fp;
    char file_name[10] = "map7.map";
    fp = fopen(file_name,"r");

    int a = 1;
    int *pnumberOfRows = &a;
    fscanf(fp,"%d",pnumberOfRows);

    typedef struct {
        bool visited;
        char *cityName;
    } map;

    map *ver = malloc(sizeof(map)*2*(*pnumberOfRows));

    fscanf(fp,"%s",ver[1].cityName);
    printf("%s",ver[1].cityName);

    return 0;
}

【问题讨论】:

    标签: c


    【解决方案1】:

    您似乎只是缺少为char *cityName 字段分配空间,这使您将fscanf 置于未分配的指针上。您可以提供一个固定字段,例如

    typedef struct {
        bool visited;
        char cityName[81];
    } map;
    

    最大长度为 80 个字符(即 不包括 \0)或事先确定文件中城市名称的长度,然后使用

    ver[0]->cityName = (char*)malloc(sizeof(char)*(stringLength+1));
    

    请注意 sizeof(char) == 1,因此请随时将其保留,但请参阅答案 here 了解更多信息。我把它留在这里是为了表达你想要实现的目标。

    另外,不要忘记在最后freemalloc'd 的内存,并在完成后关闭文件描述符(即fclose(fp);)。

    【讨论】:

    • 谢谢!你让我开心!
    • *stringLength 当然应该是*(stringLength+1)。为什么建议转换malloc()(不需要)的结果并乘以sizeof(char) which in 1?备用:ver[0]->cityName = malloc(stringLength + 1);
    • 我假设stringLength 包含上面示例中的终止符,但您对sizeof(char) 肯定是正确的;明确说明您想要实现的目标只是个人喜好问题。无论如何,编译器很可能会将其优化掉。
    猜你喜欢
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2015-08-14
    • 1970-01-01
    相关资源
    最近更新 更多