c - 从c中的文本文件初始化结构

标签 c struct

我有一个包含多个成员的结构,我需要从文本文件中初始化它们。 该文本文件包含我的结构中使用相同名称的所有成员的值。 有没有办法遍历结构中的所有成员并将变量名作为字符串引用以进行比较?

例如:

typedef struct pra_gen_con_file {
        int num_of_tasks;
        char vsr_id[1000];
} pra_gen_con_file_t;

在文本配置文件中我有:

num_of_tasks = 5
vsr_id = lior

我需要这样的东西:

for line in text_file_lines:
  for member in pra_gen_con_file.members():
    if member.member_name == line.split('=')[0]:
      pra_gen_con_file.member = line.split('=')[1]

我需要在 C 中实现。

谢谢 里尔

最佳答案

这种自省(introspection)能力,虽然在 Python 这样的语言中非常惯用,但在 C 中是不可能的(没有一些非常依赖调试信息的奇怪 hack)。编译器通常不会在生成的二进制文件中存储变量的名称,因此所有对 struct 成员的引用都是通过将偏移量添加到 struct 的位置来完成的在内存中

您必须手动解析并分配给变量名称。

采用以下 C 代码:

struct my_struct
{
    int a;
    int b;
    float f;
};

void assign(void * a)
{
    struct my_struct * m = (struct my_struct*) a;
    m->a = 100;
    m->b = -10;
    m->f = 44.1;
}

在编译时,编译器实际生成以下程序集(x86_64 Linux,GCC 4.8):

assign:
.LFB20:
.cfi_startproc
  movl $100, (%rdi) ;move 100 into the the memory location stored in register %rdi
  movl $-10, 4(%rdi); move -10 into (%rdi)+4bytes
  movl $0x42306666, 8(%rdi) ;move 44.1(hex representation) into (%rdi)+8 bytes
  ret
.cfi_endproc

关于c - 从c中的文本文件初始化结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20033031/

相关文章:

c - 为什么这段代码不画三角形?

c# - 为什么有些方法对可空结构的空值起作用而有些方法不起作用?

python - 在 Python 中序列化 C 结构并通过套接字发送

c++ - 循环递归(生成数据)

c - 在结构数组中搜索函数 - 停止条件未知

c - 将结构传递给函数

java - Struts框架的数据流

c - Null/void 指针不正确的值

c - 对于 (*ptr)[],为什么 printf ("%p",(void*)ptr+1) 有效但 printf ("%p",ptr+1) 无效?

c - 具有不同功能的线程之间的互斥锁