【问题标题】:Error when reading a csv-file to a struct将 csv 文件读取到结构时出错
【发布时间】:2015-12-27 14:40:57
【问题描述】:

我无法从 csv 文件中读取数据并将其解析为结构。我认为最好显示一些代码。

这是我的结构:

typedef struct MyStruct{
    char text[150];
    char attr[4][50];
    char check;
    short int num;
} t_mystruct;

我的文件中的示例行可能如下所示:这是一个长文本;棕色;绿色;黄色;无声;X;13;

现在我想读取该文件并将该数据添加到数组中:

list = malloc(sizeof(t_mystruct) * LIST_SIZE); /* Allocating Memory */

for (i = 0; i < LIST_SIZE; i++) /* Adding data to list */
{
    t_mystruct element;

    if (fscanf(fp, "%149[^;];%49[^;];%49[^;];%49[^;];%49[^;];%49[^;];%[^;];%d;", &element.text, &element.attr[0], &element.attr[1], &element.attr[2], &element.attr[3], &element.check, &element.num) != 7)
        break; /* Break ==> Incomplete line/data */

    list[i] = element;  /* Add to list */
}

这可行,但我面临两个问题:

  1. “num”值与我的文件中的值不同。我得到的结果从 49 到 13000 左右,但它们与我的实际输入值(在我的示例中为 13)不匹配。
  2. 代码属于“readFile”函数。在该函数结束时,我面临 “围绕变量“元素”的堆栈已损坏” 错误。 编辑:调试时,我可以继续,程序按预期运行。

但我看不到我的错误。

【问题讨论】:

  • 您是否尝试将%d; 更改为%hd; 作为这个short int?
  • 这不会改变任何事情。
  • "%149[^;];%49[^;];%49[^;];%49[^;];%49[^;];%c;%hd;%*c"

标签: c struct stack-corruption


【解决方案1】:

您已经指定了五个格式说明符

%49[^;];

但是你的结构只有四个,而且你只提供了四个参数来匹配。当它是short 时,您还将最后一个值读取为int。

【讨论】:

  • 谢谢。通常需要第二双眼睛才能找到如此明显的错别字。
猜你喜欢
  • 2018-07-06
  • 2018-09-01
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
  • 1970-01-01
相关资源
最近更新 更多