将csv文件读取到结构

时间:2015-12-27 14:40:58

标签: c struct stack-corruption

我在从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”函数。在该函数结束时,我面对一个“堆栈变量”元素“已损坏”错误。 编辑:调试时,我可以继续,程序按预期工作。
  3. 但我看不出自己的错误。

1 个答案:

答案 0 :(得分:1)

您已指定五个格式说明符

%49[^;];

但你的结构只有四个,你只提供四个匹配的参数。您还在int时将最后一个值读为short