【发布时间】:2024-05-01 16:00:03
【问题描述】:
我是 C 的新手。我有一个具有特定结构的 csv 文件。我创建了结构并从 csv 文件中读取数据并使用定义的结构打印它。但是,我不需要打印结构,而是需要保存它,以便访问它以供以后处理。到目前为止,我已经明白我需要使用动态内存分配,但我现在完全迷失了。任何线索都会非常有用。
输入文件如下,
2,33.1609992980957,26.59000015258789,8.003999710083008
5,15.85200023651123,13.036999702453613,31.801000595092773
8,10.907999992370605,32.000999450683594,1.8459999561309814
11,28.3700008392334,31.650999069213867,13.107999801635742
14,7.046000003814697,23.5939998626709,6.254000186920166
到目前为止我的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct O_data
{
unsigned int index;
float x;
float y;
float z;
};
struct O_data * deserialize_data(struct O_data *data, const char *input, const char *separators)
{
char *p;
struct O_data tmp;
if(sscanf(input, "%d,%f,%f,%f", &data->index, &data->x, &data->y, &data->z) != 7)
return NULL;
return data;
}
int main(int argc, char *argv[])
{
FILE *stream;
char *line = NULL;
size_t len = 0;
ssize_t nread;
struct O_data somedata;
if (argc != 2) {
fprintf(stderr, "Usage: %s <file>\n", argv[0]);
exit(EXIT_FAILURE);
}
stream = fopen(argv[1], "r");
if (stream == NULL) {
perror("fopen");
exit(EXIT_FAILURE);
}
while ((nread = getline(&line, &len, stream)) != -1) {
deserialize_data(&somedata, line, ",");
// How do I save some data to memory here to access it later like somedata[i] for ith struct later outside main.
printf("index: %d, x: %f, y: %f, z: %f\n", somedata.index, somedata.x, somedata.y, somedata.z);
}
free(line);
fclose(stream);
exit(EXIT_SUCCESS);
}
【问题讨论】:
标签: c struct dynamic-memory-allocation