如果我只使用"/home/user/.some/qwe"
代替homedir->str
,则可以使用。
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);
}
答案 0 :(得分:3)
您可以使用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);
答案 1 :(得分:2)
通常情况下,$HOME
不会以/
结尾。因此,对于您的情况,HOME
= /home/user
,mkdir的字符串将如下所示:/home/user.some/qwe
(注意缺少/
)。
尝试更改代码以添加缺少的斜杠,例如使用:
g_string_append(homedir, "/.some/qwe");
话虽如此,你真正需要的只是知道如何调试 - 只需将你的字符串打印到stdout就会立即显而易见。