在函数内初始化结构的成员
initialize a member of a struct inside a function
我正在将函数连接到 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 字符数组,由于 运行 该代码
如何在函数内部初始化它的值?
谢谢
当你有会员时
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");
}
您需要记得在不需要时在 name
上调用 free
。
您尝试写入的字段类型为 char
。 strcpy
函数需要 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");
}
}
完成后,您需要记得在 name
上调用 free
。
我正在将函数连接到 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 字符数组,由于 运行 该代码
如何在函数内部初始化它的值? 谢谢
当你有会员时
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");
}
您需要记得在不需要时在 name
上调用 free
。
您尝试写入的字段类型为 char
。 strcpy
函数需要 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");
}
}
完成后,您需要记得在 name
上调用 free
。