g_strduping элемент-член массива char - PullRequest
2 голосов
/ 23 января 2010
typedef struct {
char name[10];
} A;
A * inst = get_instance_of_A();
char *str = g_strdup ( inst->name );

Последняя строка не компилируется. Я также попытался & (inst-> name) без удачи. Я получаю ошибку:

Ошибка: char не является структурным типом.

Я понимаю, что char [] и char * - это совершенно разные типы. Но не должен ли g_strdup занять начальную позицию строки C и обмануть ее? Если я сделаю следующее, это сработает:

char temp[10];
strncpy(temp,inst->name,9);
char *str = g_strdup ( temp );

Как мне добиться того, что я пытаюсь сделать, не копируя локальный массив символов? Я думаю, что неправильно передал аргумент в первом сценарии, так как в обоих случаях g_strdup передается массив символов.

Ответы [ 2 ]

1 голос
/ 23 января 2010

Я не думаю, что ваша проблема лежит там, где вы думаете. gchar и char для всех намерений и целей одинаковы. Например, этот код прекрасно работает для меня:

#include <glib.h>

typedef struct {
    char name[10];
} A;

A global_A = { "name here" };

A *
get_instance_of_A(void)
{
    return &global_A;
}

int
main(int argc, char **argv)
{
    const A *inst = get_instance_of_A();
    char *str = g_strdup(inst->name);
    g_print("%s\n", str);
    return 0;
}
0 голосов
/ 23 января 2010

используйте gchar вместо char в структуре.

...