我正在将函数连接到gtk中的信号,我正在使用结构将多个变量传递给函数
我想在函数
中初始化char数组的值到目前为止,这是我的代码:
struct new_button_data
{
char name;
};
static struct new_button_data nb;
g_signal_connect(new_button_dialog,"response",G_CALLBACK (add_new_button),&nb);
void add_new_button(GtkDialog *dialog, gint response_id, gpointer new_button)
{
if (response_id==-5) //ok button pressed
{
strcpy(((char *)((struct new_button_data *) new_button)->name) , "test");
}
}
我试图将从gtk小部件获取的字符串分配给new_button-> name字符数组,并且由于运行该代码而得到段错误
如何在函数内初始化其值? 感谢
答案 0 :(得分:2)
您尝试写入的字段属于char
类型。 strcpy
功能需要char *
。您不能仅仅将char
投射到char *
并希望工作正常。
如果您知道名称有多大,可以将其定义为char数组:
#define NAME_LEN 100
struct new_button_data
{
char name[NAME_LEN];
};
如果您不知道大小,可以将其声明为char *
并使用strdup
为其创建内存并复制字符串:
struct new_button_data
{
char *name;
};
void add_new_button(GtkDialog *dialog, gint response_id, gpointer new_button)
{
if (response_id==-5) //ok button pressed
{
((struct new_button_data *) new_button)->name = strdup("test");
}
}
当您完成此操作时,您需要记得在free
上致电name
。
答案 1 :(得分:1)
当你有会员时
char name;
您只能在struct
中保留一个字符。你不能拿一个字符串。
您需要使用
char* name;
当您需要存储名称时,为name
分配内存。
然后,将名称复制到name
。
struct new_button_data
{
char* name;
};
然后,
if (response_id==-5) //ok button pressed
{
(struct new_button_data *) new_button)->name = malloc(5); // Make it large enough
strcpy(((struct new_button_data *) new_button)->name , "test");
}
当您不需要free
时,您需要记得致电name
。