#c #string #pointers #struct
Вопрос:
Я пытаюсь инициализировать элемент структуры с помощью функции, которая возвращает объединенную строку.
#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)
};
Это сообщение об ошибке :
ошибка: элемент инициализатора не является постоянным
конкат(алфавит, цифры)
Комментарии:
1. educative.io/blog/concatenate-string-c
2. Сообщение об ошибке касается не вашей
concat
функции как таковой, а того, как вы не можете вызывать функции в инициализаторах глобальных переменных (области действия файла). Либо создайтеdefault_state
локальную переменную, либо инициализируйте ее на ранней стадииmain
, либо инициализируйте ее в строку, известную во время компиляции. Также обратите внимание , что вашаconcat
функция изменитсяstring1
, поэтому ее использование позже может привести к неожиданностям.
Ответ №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
};