【问题标题】:How to initialize a struct member with a function return?如何使用函数返回初始化结构成员?
【发布时间】:2021-08-23 10:22:47
【问题描述】:

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

#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(字母、数字)

【问题讨论】:

  • 该错误消息与您的 concat 函数本身无关,它与您如何无法在全局(文件范围)变量的初始化程序中调用函数有关。要么将default_state 设为局部变量,要么在main 的早期对其进行初始化,或者将其初始化为编译时已知的字符串。另请注意,您的concat 函数将更改string1,因此稍后使用它可能会导致意外。

标签: c string pointers struct


【解决方案1】:

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

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

例如,使用"str1" "str2""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
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多