将 csv 文件读取到结构时出错
Error when reading a csv-file to a struct
我无法从 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 */
}
这可行,但我面临两个问题:
- "num" 值与我的文件中的值不同。我得到的结果从 49 到大约 13000,但它们与我的实际输入值不匹配(在我的示例中为 13)。
- 该代码属于 "readFile" 函数。在该函数结束时,我遇到 "stack around the variable "element" was corrupted" 错误。 编辑:调试时,我可以继续,程序按预期运行。
但是我看不到我的错误。
您已经为
指定了 五个 格式说明符
%49[^;];
但是你的结构只有四个,你只提供四个参数来匹配。当它是 short
.
时,您还将最后一个值读取为 int
我无法从 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 */
}
这可行,但我面临两个问题:
- "num" 值与我的文件中的值不同。我得到的结果从 49 到大约 13000,但它们与我的实际输入值不匹配(在我的示例中为 13)。
- 该代码属于 "readFile" 函数。在该函数结束时,我遇到 "stack around the variable "element" was corrupted" 错误。 编辑:调试时,我可以继续,程序按预期运行。
但是我看不到我的错误。
您已经为
指定了 五个 格式说明符%49[^;];
但是你的结构只有四个,你只提供四个参数来匹配。当它是 short
.
int