gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:53:10 25 4
gpt4 key购买 nike

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

例如:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com