如何从返回类型为const char*
的函数中返回本地字符数组?
注意: 我想在不使用std::string的情况下完成这个操作。
const char * getXXX()
{
char buf[32];
sprintf(buf,"XXX%d",i); // some manipulation
return buf; // How to return???
}
如何从返回类型为const char*
的函数中返回本地字符数组?
注意: 我想在不使用std::string的情况下完成这个操作。
const char * getXXX()
{
char buf[32];
sprintf(buf,"XXX%d",i); // some manipulation
return buf; // How to return???
}
const char * getXXX()
{
static char buf[32];
sprintf(buf,"XXX%d",i);
return buf;
}
这将起作用。
正如你正确地注意到的那样,你不应该返回“buf”(这是一个局部变量,函数返回后它的内存将被释放)。解决方案是分配一些内存并将其返回。
char * returnBuf = new char[32];
memcpy(returnBuf, buf, 32 * sizeof(char));
return returnBuf;
char * result = GetXXX();
// Process
delete[] result;
std::string
吗?使用标准库将使您作为C++程序员的生活变得更加轻松! - Some programmer dudestd::string
- 那么你可以通过值返回它,而不必担心释放已分配的内存。 - Spookstd::ostringstream
?使用它,你可以使用所有正常的C++流输出格式化功能,并且仍然可以得到一个std::string
作为输出。没有固定大小的缓冲区,也不需要特殊处理字符串,具有类型安全性和自动追加到字符串的功能。所有这些都无法通过使用旧的C风格的sprintf
及其相关函数来实现。 - Some programmer dude