为什么mkdir无法使用GString?

问题描述:

如果我只使用"/home/user/.some/qwe"而不是homedir->str,它可以工作。为什么mkdir无法使用GString?

struct stat st = {0}; 

GString* homedir = g_string_new(NULL); 
g_string_append(homedir, getenv("HOME")); 
g_string_append(homedir, ".some/qwe"); 

printf("%s", homedir->str); 

if (stat(homedir->str, &st) == -1) { 
    int res= mkdir(homedir->str, 0777); 
    g_string_free(homedir, TRUE); 
} 

您将能够避免此问题,并始终建立有效的路径名用g_build_filename()

char *homedir = g_build_filename(getenv("HOME"), ".some", "qwe", NULL); 
printf("%s, homedir); 
if (stat(homedir, &st) == -1) { 
    int res = mkdir(homedir, 0777); 
} 
g_free(homedir); 

通常情况下,$HOME/结束。因此,对于您的情况,HOME = /home/user,并且mkdir的字符串看起来像:/home/user.some/qwe(请注意丢失/)。 试着改变你的代码,添加缺少的斜线,例如使用:

g_string_append(homedir, "/.some/qwe"); 

虽这么说,你真正需要的是知道如何调试 - 只打印您的字符串到stdout的价值将使其立即明显。

+0

是的,你说得对!谢谢 – stsdc 2014-11-05 23:40:39