使用 getcwd() 在 C++ 中返回一个空字符串

Returning an empty string in C++ using getcwd()

本文关键字:一个 字符串 getcwd C++ 使用 返回      更新时间:2023-10-16

我有一个关于如何在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。

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

你可以简单地这样做:

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并让它分配缓冲区。在这种情况下,在构造base之后调用free(result)。 我不推荐这种方法,因为这里不需要动态分配。

相关文章: