gpt4 book ai didi

c - 在 C 中通过引用传递结构,但修改并非全部存在

转载 作者:太空宇宙 更新时间:2023-11-03 23:44:13 24 4
gpt4 key购买 nike

<分区>

我正在尝试编写一个简单的程序来读取 C 中的配置文件。但是我的结构成员中的数据并没有保留在我放置的位置。

代码在底部。

这就是我认为我正在做的:

  • 我正在创建一个结构
  • 通过引用传递结构
  • 从配置文件填充结构的成员

当我尝试访问成员时,我只能从配置文件的最后一行获取数据。

谢谢!


编辑:我希望它用配置文件中的键/值填充结构。相反,它只有配置文件中最后一行的值。

预期输出

example.com

实际输出

食物.txt

问题在于:

conf->key[i]   = key;
conf->value[i] = value;

ma​​in.c

/*
* Goal is to make simple key value storage with struct and pointers
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXLEN 100
#define CONFIG_MAX_BUF 1024
#define DELIM "="

struct config_s {
char *key[MAXLEN];
char *value[MAXLEN];
};

void read_config_file(struct config_s *conf, char *filename, int *size_of_array);

int main() {
int i = 0, size_of_array;
// type config_s has key and value members
struct config_s c;

read_config_file(&c, "test.cfg", &size_of_array);
printf("size of array: %i\n", size_of_array);

// if i want to print them all out, i can use this, but i'll have
// a function to search for a certain key and return the value.
int l = 0, e = 1;
printf("********** TEST 1 ***********\n");
printf("key: [%s] value: [%s] i: [%i]\n", c.key[l], c.value[l], l);
printf("key: [%s] value: [%s] i: [%i]\n", c.key[e], c.value[e], e);
printf("********** TEST 2 ***********\n");

return 0;
}

void read_config_file(struct config_s *conf, char *filename, int *size_of_array) {
FILE *file;
file = fopen(filename, "r");

char line[CONFIG_MAX_BUF];

int i = 0;

char *cfline;
char *key;
char *value;

while(fgets(line, sizeof(line), file) != NULL) {
cfline = strstr((char *)line, DELIM);
value = cfline + strlen(DELIM);
value[strlen(value) - 1] = '\0';

key = strtok((char *)line, DELIM);
printf("%i %s %s\n", i, key, value);
conf->key[i] = key;
conf->value[i] = value;
printf("%i %s %s\n", i, (*conf).key[i], (*conf).value[i]);
i++;
}
printf("%s %s\n", (*conf).key[0], (*conf).value[0]);
fclose(file);
*size_of_array = i;
return;
}

测试.cfg

server=example.com
port=443
file=food.txt

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