c - 如何使用函数返回初始化结构成员?
问题描述
我正在尝试使用返回连接字符串的函数初始化结构成员。
#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(字母,数字)
解决方案
初始化在编译时完成并计算。您不能在编译时调用函数。在编译时,编译器需要知道初始化值,但它不能运行任何函数。
在运行时延迟初始化,在那里你可以调用任何你想要的函数,或者使用编译器可以使用的立即值。
例如,使用"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
};
推荐阅读
- react-native - 无法在设备/模拟器上运行 react-native-cli starter android 应用程序
- angular - 来自 Github 的 Angular 模块,如何集成到我的模块中?
- php - 为什么将日期转换为格式时出错?
- windows - 自动化 Windows 10 中的默认应用程序
- python - “将 fasttext_pybind 导入为 fasttext”获取 ImportError:generic_type:类型“args”已注册
- r - 如何在具有不同轴大小的 R 中绘图时激活“保持打开”?
- python - 从 lambda 的 API 网关重定向到 IAM Auth API
- python - 新人开户时如何默认显示余额为零?
- c++ - 什么是真正的分享?
- python - 遍历两个列表中的元素