返回char数组而不是const char *

4

如何从返回类型为const char*的函数中返回本地字符数组?
注意: 我想在不使用std::string的情况下完成这个操作。

const char * getXXX()
{
  char buf[32];
  sprintf(buf,"XXX%d",i);  // some manipulation
  return buf; // How to return???
}

@Spook,如果我在函数内使用“new”关键字,那么我应该在哪里删除指针? - Nadaraj
4
您能详细说明为什么您不想使用std::string吗?使用标准库将使您作为C++程序员的生活变得更加轻松! - Some programmer dude
@Nadaraj 我已经回答过了 :) 如果你在函数内部分配了内存,那么调用者就需要负责释放它。当然,除非你使用 std::string - 那么你可以通过值返回它,而不必担心释放已分配的内存。 - Spook
1
你是否了解std::ostringstream?使用它,你可以使用所有正常的C++流输出格式化功能,并且仍然可以得到一个std::string作为输出。没有固定大小的缓冲区,也不需要特殊处理字符串,具有类型安全性和自动追加到字符串的功能。所有这些都无法通过使用旧的C风格的sprintf及其相关函数来实现。 - Some programmer dude
@Joachim Pileborg 感谢您的帮助。也感谢 Spook、shivakumar 和 utnapistim。 - Nadaraj
显示剩余2条评论
2个回答

2
const char * getXXX()
{
  static char buf[32];
  sprintf(buf,"XXX%d",i);
  return buf;
}

这将起作用。


1

正如你正确地注意到的那样,你不应该返回“buf”(这是一个局部变量,函数返回后它的内存将被释放)。解决方案是分配一些内存并将其返回。

char * returnBuf = new char[32];

memcpy(returnBuf, buf, 32 * sizeof(char));

return returnBuf;

记住,调用者将负责释放由getXXX返回的内存:
char * result = GetXXX();

// Process

delete[] result;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接