2

在我的应用程序中,我有结构:

struct
{
  gchar *xen_srv_addr;
  gchar *xen_srv_usr;
  gchar *xen_srv_psw;
  gchar *xen_srv_prt;
} Xen_Server_Connection;

我想为那个 gchars 分配一个值。我从文件中读取它,用 strtok 解析并以 char* 形式返回。设置解析器查找特定标记并:

if(a==b)
  {
    Xen_Server_Connection.xen_srv_addr=Parm_Pars(pattern, 2);
    .....
  }  

此分配仅在此 if 块内有效。gchar 之后就变成了垃圾。但如果我:

if(a==b)
  {
    Xen_Server_Connection.xen_srv_addr="192.168.1.1";
    .....
  }

一切似乎都很好,我可以在全球范围内访问该 gchar。好像有什么不明白

4

1 回答 1

2

您不了解Parm_Pars()函数对返回值的生命周期保证。它似乎不会永远存在,所以如果你想坚持下去,你需要复制它。

只需将该行包装在调用中g_strdup()以获取动态分配的副本,就可以了。当然,当你想释放你的Xen_Server_Connection,你必须调用g_free()所有重复的字符串,否则你会泄漏内存。

更新:混合普通chargchar很好,glib 保证这gchar只是char. 我认为他们甚至建议(在某处)应用程序从不使用gchar.

于 2012-08-23T12:08:24.083 回答