|
发表于 2009-5-11 09:50:51
|
显示全部楼层
[PHP]
gchar *filename; //赋值为:/home/name/dir/text.c
gchar *temp,*temp1;
gchar *filepath;
g_strrstr(m_strtemp, "/"); /* XXX: m_strtemp 是什么, 有初值么? 此句的返回值是否忘了赋给谁 */
temp = g_strdup (filename);
temp1 = g_strrstr(temp, "/");
m_charlong = g_printf(temp) - g_printf(temp1); /* XXX: 想不出为什么要用 g_printf(). 如果 temp/temp1 中有特殊转义符就可能导致内存非法访问之类的问题. 也许楼主的本意是想用 strlen() 但是又找不到 glib 中对应的函数. 那就直接用 strlen() 好了, 这是 C 标准中的东西, 不影响平台无关性的. 另外, 这里直接用 temp1 - temp 可以更快地得到结果 */
temp1 = g_strndup(temp, m_charlong);
/* XXX: 这里应该加一句 g_free(temp); */
temp = g_strdup(temp1);
/* XXX: 和之前一样, m_strtemp 的内容是什么, 有多长, 这都可能导致 filepath 溢出. 但更关键的, filepath 从以上代码来看根本没有分配空间, 为野指针, 那么会导致楼主提到的问题就不奇怪了 */
g_sprintf(filepath, "%s", m_strtemp); //执行到这的时候,最初的filename的值也会变成filepath中的值
[/PHP]
P.S. 如果楼主感觉 glib 提供的字符串处理不能满足自己的需求, 或是不好理解的话, 那就不要勉强自己使用它们, 还是直接手工操作字符串比较省事 |
|