使用getcwd()

时间:2017-03-30 11:23:13

标签: c++ string

我有一个关于如何在C ++中正确返回空字符串的问题,请参阅下面的代码enter code here

string Options::getCwd()
{
    const char *buffer = getcwd(NULL, 0);
    if (buffer == NULL)
    {
        buffer = "";
    }
    string base(buffer);
    base += '/';

    return base;
}

问题是如果getcwd()失败,返回的缓冲区指针为NULL,而将缓冲区设置为空字符串则解决了这个问题。但是,我想在base中返回空字符串。由于base与缓冲区中的空字符串的串联,当前代码返回base =“/”。另外,尝试使用free()缓冲区会使编译器抱怨,因为C ++中的字符串必须声明为const。

关于如何以更好的方式解决这个问题的任何其他想法?

1 个答案:

答案 0 :(得分:0)

你可以这样做:

if (buffer == NULL)
{
    return "";
}

空字符串文字将被隐式转换为空的std :: string,然后返回。

然而,您还有其他问题,例如getcwd期望有效缓冲区作为输入,而不是NULL(编辑:底部澄清)。

以下总代码应该有效:

string Options::getCwd()
{
    char buffer[1024]; // Or optionally PATH_MAX
    char *result = getcwd(buffer, 1024);
    if (result == NULL)
    {
        // Optionally do something with errno here
        return "";
    }

    string base(buffer);
    base += '/';
    return base;
}

修改

好的,似乎确实可能将NULL传递给getcwd并让它分配缓冲区。在这种情况下,在构建free(result)之后调用base。我不推荐这种方法,因为这里不需要动态分配。