【发布时间】:2019-11-15 03:39:59
【问题描述】:
这是我关于堆栈溢出的第一篇文章,希望有人能够指出我正确的方向。我正在编写一个 C 函数,我的目标是读取一个 csv 文件。然后将文件中的数据传递给结构数组,然后我想将其返回到 main() 中的函数调用,访问数据以供进一步使用。如何正确读取并返回完整的结构数组?
此功能是现有 PLC 程序的附加功能,此时所有系统参数都存储在保留内存中。目标是将参数读/写到 CSV 文件以进行备份。我怀疑我在 while 循环中做错了什么,但此时无法弄清楚是什么。也可能是我没有正确使用指针。 CSV 文件如下所示:
2;motor nominal current;1700
3;motor nominal speed;2500.0
4;motor nominal power;1200.0
5;motor nominal voltage;690.0
6;Enable motor heating;TRUE
7;Motor heating time on;40.0
顺便说一句,我知道我没有释放函数中分配的内存。这将进一步处理。
这是包含该函数的程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BSIZE 80
struct parameter{
int id;
char *name;
char *value;
};
struct parameter* readCSV(const char *file)
{
char buffer[BSIZE];
FILE *f;
char *field;
// open the CSV file
f = fopen(file,"r");
if( f == NULL)
{
printf("Unable to open file '%s'\n",file);
exit(1);
}
static struct parameter *parameters[BSIZE];
int i = 0;
// read the data
while(fgets(buffer,BSIZE,f) != NULL)
{
parameters[i] =(struct parameter*)malloc(sizeof(struct parameter));
// get id
field = strtok(buffer,";");
parameters[i]->id = atoi(field);
// get name
field = strtok(NULL,";");
parameters[i]->name = field;
// get value
field = strtok(NULL,";");
parameters[i]->value = field;
// display the result
printf("ID%d:\t%s\t%s\n",parameters[i].id, parameters[i].name, parameters[i].value);
i++;
}
//close file
fclose(f);
return *parameters;
}
int main()
{
struct parameter *parameters;
parameters = readCSV("QD_Config.csv");
printf("ID%d:\t%s\t%s\n",parameters[0]->id, parameters[0]->name, parameters[0]->value);
return(0);
}
我能够打印文件的内容,但在传递结构数组之前似乎无法正确存储它。在main()中,调用函数时,我只获取文件中的姓氏和值,但获取的是第一个的ID号。
【问题讨论】:
标签: c arrays csv malloc structure