在我的应用程序中,我有结构:
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。 似乎我不明白
答案 0 :(得分:2)
您不了解Parm_Pars()
函数对返回值的生命周期保证。它似乎永远不会存在,所以如果你想坚持下去,你需要复制它。
只需在调用g_strdup()
时将该行换行即可获得动态分配的副本,您应该没问题。当然,当您想要释放Xen_Server_Connection
时,您必须在所有重复的字符串上调用g_free()
,否则您将泄漏内存。
更新:简单地混合char
和gchar
很好,glib保证gchar
只是char
的别名。我认为他们甚至建议(某处)应用程序永远不会使用gchar
。