C++ 将ptr返回堆栈缓冲区
我遇到了以下函数:C++ 将ptr返回堆栈缓冲区,c++,C++,我遇到了以下函数: #include <string.h> using namespace std; std::string getErrnoString(const int errorNumber) { const int maxLength = 256; char buffer[maxLength]; return strerror_r(errorNumber, buffer, maxLength); } #包括 使用名称空间std; std::st
#include <string.h>
using namespace std;
std::string getErrnoString(const int errorNumber)
{
const int maxLength = 256;
char buffer[maxLength];
return strerror_r(errorNumber, buffer, maxLength);
}
#包括
使用名称空间std;
std::string getErrnoString(const int errorNumber)
{
常量int maxLength=256;
字符缓冲区[maxLength];
返回strerror\u r(错误号、缓冲区、最大长度);
}
我的具体问题是关于函数返回什么。
它看起来像是返回一个指向“buffer”的指针。哪一个在堆栈上-对吗
这不是一个问题吗?它返回一个从函数
strerror\r(errorNumber,buffer,maxLength)返回的std::string
代码>
您正在将指向“buffer”的指针作为参数传递给函数strerror\r
,其他参数如maxlength
和errorNumber是的,函数strerror\r
使用buffer
存储并返回消息,但是由于函数getErrnoString
返回一个std::string
,因此调用:
string::string(const char* data)
此构造函数将数据从传递的指针复制到std::string
本身的内部缓冲区,因此没有问题,因为您随后返回了存储在std::string
中的缓冲区副本,并按值返回。上述代码不会返回指向本地缓冲区的指针。它根本不返回任何指针。它返回一个std::string
对象,该对象由strerror\u r
返回的字符缓冲区构造而成。按值返回std::string
对象是完全安全的
此函数中的return
语句执行到std::string
类型的隐式转换。在显式形式中,它将如下所示
return std::string(strerror_r(errorNumber, buffer, maxLength));
请注意,上述代码中使用的特定于GNU版本的strerror\r
并不保证函数将使用用户提供的缓冲区。允许函数返回指向系统缓冲区的指针,而不使用用户提供的缓冲区。但在一般情况下,用户必须假设用户提供的缓冲区将用于字符串。函数似乎至少有两个版本,返回int或char*: