Как установить член структуры типа string - PullRequest
1 голос
/ 26 ноября 2009

У меня есть структура, которая содержит член с именем char * text. После того, как я создал объект из структуры, как мне установить текст в строку?

Ответы [ 4 ]

5 голосов
/ 26 ноября 2009

Если ваша структура похожа на

 struct phenom_struct {
    char * text;
 };

и вы выделяете его

 struct phenom_struct * ps = malloc (sizeof (phenom_struct));

тогда после проверки значение ps не равно NULL (ноль), что означает «сбой», вы можете установить текст в строку, подобную этой:

 ps->text = "This is a string";
1 голос
/ 26 ноября 2009

Ваш член структуры на самом деле не строка, а указатель. Вы можете установить указатель на другую строку с помощью

o.text = "Hello World";

Но вы должны быть осторожны, строка должна жить как минимум столько же, сколько объект. Использование malloc, как показано в других ответах, является возможным способом сделать это. Во многих случаях более желательно использовать массив char в структуре; то есть вместо

struct foobar {
    ...
    char *text;
}

использование

struct foobar {
    ...
    char text[MAXLEN];
}

, что, очевидно, требует, чтобы вы знали максимальную длину строки.

0 голосов
/ 26 ноября 2009

Пример:

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
0 голосов
/ 26 ноября 2009
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");
}
...