c - 从 C 中的函数返回结构体数组

标签 c arrays struct

我正在为客户开发 API。他们希望在他们的项目的 CVI 环境中使用它。它本质上是一个解析器。因此,我们的目标是创建一个 .h 和 .C 文件,其中包含一个可以调用的函数,以便它们可以解析文件并读取 .csv 文件中的每个元素。每行将被分隔并放置在结构体中的变量中,该变量是结构体数组中的元素。

我已经开发了这个功能。现在我想让函数处理两个参数:一个存储有文件路径字符串的数组,以及要读取的行数。

所以它本质上是一个具有 void 类型的函数。

void ParseConfigFile(char filepath[], int LinesToRead);

我在头文件中定义了结构减法。

然后我声明:

struct TestStep TestSteps[500];

在调试过程中,我只能使用如下格式在函数底部打印:

TestSteps[LineNumber].StructElement

很容易。

如何将其转换为可以使用上面显示的参数调用的函数,并返回结构数组,以便用户可以调用:

TestSteps[LineNumber].StructElement

我希望这不会令人困惑。

提前致谢!

最佳答案

我发现有两种可能的方法可以从文件中获取数据。

第一个是让客户端提供结构数组。然后将该数组及其长度传递给函数。该函数可能无法填充整个数组,可能是因为条目较少或因为文件无法打开。返回数组的实际长度或错误指示符,通常为 -1:

int read_config(const char *filepath,
    struct config cfg[], int max_cfg);

并这样调用它:

struct config cfg[MAX_CONFIG];
int n;

n = read_config("my.config", cfg, MAX_CONFIG);
if (n > 0) {
    // configure!
}

这可能接近您的“要读取的行”方法。

第二个是返回您的函数使用 malloc 和/或 realloc 在堆上分配的配置列表:

struct config *new_config(const char *filepath);

然后您必须找到一种方法来指示已读取的配置数量。您可以使用哨兵值(通常是结构体字段之一中的 NULL 指针)来执行此操作。或者,您可以将此信息写入用户必须提供的变量:

struct config *new_config(const char *filepath, size_t &nconfig);

由于此信息已分配,因此用户必须释放它。一个典型的用例是:

struct config *cfg;
size_t n;

cfg = new_config("my.config", &n);
if (cfg) {
    // configure!

    free(cfg);
}

这种方法更加灵活,因为它允许任意数量的配置设置。但编码和使用起来有点困难。

关于c - 从 C 中的函数返回结构体数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27303294/

相关文章:

c - 尝试为结构中的 void 指针赋值

c - 为什么我的C程序在输入数字后无法完成代码?

C拼图: Output of printf should be '5' always

c - 为什么所有子进程都执行主代码?

获取 PID 及其所有子项的 CPU 使用率的 C 程序

arrays - 如何防止重复在angularjs中的数组推送

javascript - 在 JavaScript 数组中搜索对象

c++ - 将 union 与结构内的位字段结合使用的正确语法

c - 声明和定义相互引用的初始化常量结构的最佳方法

python - 在numpy中绘制随机元素