为什么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的价值将使其立即明显。
是的,你说得对!谢谢 – stsdc 2014-11-05 23:40:39