首页 > 解决方案 > 在 C 中将 char 写入 struct

问题描述

基本上我有一个存储我的一般程序设置的结构。我读入带有回调函数的配置以获取相应的值,但我无法将其写入结构。我已经尝试了从 memcpy 到 strcpy 到取消引用 char 指针的所有方法,但是每次结构中的 char 都保持为空。传递的字符串只包含一个字符,我检查了多次。此外,如果我将字符串 strcpy 到结构的其他字段,它工作正常。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct {
    char *datafile;
    char *logfile;
    char mode;
} general_settings;

void setSettingsData(void){
    log_trace("parsing config file for general settings initialisation");
    config_error_t rc = config_parse("config.ini", handle_settings_ini_file);
    if (rc != CONFIG_ERROR_NONE) {
        log_error("Error parsing configuration: %s on line %lu", config_get_error_string(rc), config_get_line_number());
    } else {
        log_info("Settings parsed successfully!");
    }
}

static config_error_t handle_settings_ini_file(char *section, char *key, char *value) {
    if(section != NULL && !strcmp("Allgemein", section)) {
        if (!strcmp("mode", key)) {
            general_settings.mode = strdup(value); // ??????
            log_info("Program Execution mode set to %s", value);
        } else {
            log_fatal("Unrecognized setting. Check for typos. Exiting...");
            exit(0);
        }
    }
    return CONFIG_ERROR_NONE;
}

标签: cstruct

解决方案


既然value是 a char *,你就可以得到char它指向 with *value

所以你想要general_settings.mode = *value;.

你也可以使用general_settings.mode = value[0];

由于a[b]与 相同*(a+b)*(value + 0)因此与 相同value[0],也与 相同*value


推荐阅读