我有一个关于如何在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。
关于如何以更好的方式解决这个问题的任何其他想法?
答案 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
。我不推荐这种方法,因为这里不需要动态分配。