为什么mkdir不能使用GString?

时间:2014-11-05 23:20:12

标签: c linux glib

如果我只使用"/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);
}

2 个答案:

答案 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就会立即显而易见。