使用 getcwd() 在 C++ 中返回一个空字符串
Returning an empty string in C++ using getcwd()
我有一个关于如何在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)
。 我不推荐这种方法,因为这里不需要动态分配。
相关文章:
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 如何检查一个c++字符串中有多少相同的字符/数字
- 获取用C/C++打印的最后一个字符串
- cin >> int 给定一个字符串将 int 赋值为 0
- 我如何通过引用将 c++ 字符串分配给另一个字符串
- 使用另一个字符串从字符串中删除空格
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 当分配一个字符串值并稍后通过分配另一个值进行更改时C++如何管理内存?
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- C++为 void 指针分配一个字符串
- 如何在使用 getch 后在另一个字符串的末尾连接一个字符串
- 给定一个单词数组和一个字符串,如何计算给定字符串中的所有单词
- 如何在另一个字符串的x位置插入一个字符串?
- 有没有办法我可以在 C++ 中使用 if 语句来说明如果一个字符串不是两个名称的 eqal,它会给出一个输出,ATM i
- 在另一个字符串中插入文件扩展名之前的字符串
- 我有一个返回字符串向量的函数.它需要两个字符串,并且返回一个字符串中缺少的字符串
- C++自定义流操纵器,用于更改流上的下一个字符串
- 从类返回一个字符串 — 奇怪的行为
- 从我的2d数组中的一列返回的字符串值被压缩为一个字符串(在Mac os上打开Windows txt文件)
- 你能从"volatile const char*"构造一个字符串吗?(不使用`const_cast`