2
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 );

如何在不制作本地 char 数组副本的情况下实现我想要做的事情?我认为我在第一种情况下没有正确传递参数,因为在这两种情况下 g_strdup 都被传递了一个 char 数组。

4

2 回答 2

1

我不认为你的问题出在你认为的地方。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;
}
于 2010-01-23T19:23:42.210 回答
-2

在 struct 中使用gchar而不是 char。

于 2010-01-23T19:09:39.563 回答