在函数内初始化结构的成员

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

您尝试写入的字段类型为 charstrcpy 函数需要 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