首页 > 解决方案 > 如何使用函数返回初始化结构成员?

问题描述

我正在尝试使用返回连接字符串的函数初始化结构成员。

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

char* concat(char* dest, char* src) {
    strcat(dest, src);
    return dest;
}

char string1[15] = "hello";
char string2[15] = "world";

typedef struct {
    char* member;
} STATE;

STATE default_state = {
    concat(string1, string2)
};

这是错误消息:

错误:初始化元素不是常量

concat(字母,数字)

标签: cstringpointersstruct

解决方案


初始化在编译时完成并计算。您不能在编译时调用函数。在编译时,编译器需要知道初始化值,但它不能运行任何函数。

在运行时延迟初始化,在那里你可以调用任何你想要的函数,或者使用编译器可以使用的立即值。

例如,使用"str1" "str2"处理 ad的事实"str1str2",您可以编写以下代码:

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

char* concat(char* dest, char* src) {
    strcat(dest, src);
    return dest;
}

#define HELLO "hello"
#define WORLD "world"
char string1[15] = HELLO;
char string2[15] = WORLD;

typedef struct {
    char* member;
} STATE;

STATE default_state = {
    HELLO WORLD
};

推荐阅读