Как установить член структуры типа string
Вопрос
У меня есть структура, которая содержит элемент с именем char *text.После того как я создал объект из структуры, как мне установить текст в строку?
Решение
Если ваша структура похожа на
struct phenom_struct {
char * text;
};
и вы распределяете его
struct phenom_struct * ps = malloc (sizeof (phenom_struct));
затем, после проверки, значение ps
не равно NULL (ноль), что означает «сбой», вы можете установить текст в строку, подобную этой:
ps->text = "This is a string";
Другие советы
Ваш член структуры на самом деле является не строкой, а указателем.Вы можете установить указатель на другую строку с помощью
o.text = "Hello World";
Но будьте осторожны: строка должна жить как минимум столько же, сколько и объект.Возможным способом сделать это является использование malloc, как показано в других ответах.Во многих случаях более желательно использовать в структуре массив символов;то естьвместо
struct foobar {
...
char *text;
}
использовать
struct foobar {
...
char text[MAXLEN];
}
что, очевидно, требует, чтобы вы знали максимальную длину строки.
typedef struct myStruct
{
char *text;
}*MyStruct;
int main()
{
int len = 50;
MyStruct s = (MyStruct)malloc(sizeof MyStruct);
s->text = (char*)malloc(len * sizeof char);
strcpy(s->text, "a string whose length is less than len");
}
Пример:
struct Foo {
char* text;
};
Foo f;
f.text = "something";
// or
f.text = strdup("something"); // create a copy
// use the f.text ...
free(f.text); // free the copy