C++ c_str of std::string returns 空
C++ c_str of std::string returns empty
所以,我 运行 遇到以下代码的问题,其中 std::cout << cstr << std::endl
的结果是单个字符 </code></p>
<pre><code>PyObject * CKKSwrapper::SerializeContext() {
std::string s; // 1
std::ostringstream os(s); // 2
Serial::Serialize(m_cc, os, SerType::BINARY); // 3
const std::string string_repr = os.str(); // 4
std::cout << string_repr << std::endl; // 5
char *cstr = new char[string_repr.length() + 1]; // 6
std::strcpy(cstr, string_repr.c_str()); // 7
std::cout << "******************************************************" << std::endl; // 8
std::cout << string_repr << std::endl; // 9
std::cout << "******************************************************" << std::endl; // 10
std::cout << cstr << std::endl; // 11
auto resp = PyBytes_FromString(cstr); // 12
return resp;
}
检查第 5 行的 std::cout
结果看起来不错并且是非空的。
@ � �4 lbcrypto::LPCryptoParametersCKKSlbcrypto::DCRTPoly � @ �
^ 前几个字符(不确定是否有帮助)
稍后,我创建了一个字符数组并将 c_str
复制到其中(我认为)这避免了所讨论的临时结果问题
Don't attempt to store the pointer returned by c_str(). If you need that string as a C-string for an extended period of time, allocate memory buffer for it yourself and copy the result of c_str() to that buffer.
我还发现了 ,这让我想知道我的 string_repr
对象是否被破坏了,所以我在第 9 行做了一个 std::cout,它看起来也不错。
谁能帮帮我?我真的不确定问题出在哪里。不幸的是,我需要将 char * []
传递给 PyBytes_FromString
,尽管这个名字可能让人联想到
推测字符串包含一个或多个 nul
个字符,导致 strcpy()
没有复制所有字节。在您 return 从函数中释放 cstr
之前,您还存在内存泄漏。
您可以通过绕过不必要的字符串数组并调用 PyBytes_FromStringAndSize
:
来避免这两个问题
return PyBytes_FromStringAndSize(string_repr.c_str(), string_repr.size());
所以,我 运行 遇到以下代码的问题,其中 std::cout << cstr << std::endl
的结果是单个字符 </code></p>
<pre><code>PyObject * CKKSwrapper::SerializeContext() {
std::string s; // 1
std::ostringstream os(s); // 2
Serial::Serialize(m_cc, os, SerType::BINARY); // 3
const std::string string_repr = os.str(); // 4
std::cout << string_repr << std::endl; // 5
char *cstr = new char[string_repr.length() + 1]; // 6
std::strcpy(cstr, string_repr.c_str()); // 7
std::cout << "******************************************************" << std::endl; // 8
std::cout << string_repr << std::endl; // 9
std::cout << "******************************************************" << std::endl; // 10
std::cout << cstr << std::endl; // 11
auto resp = PyBytes_FromString(cstr); // 12
return resp;
}
检查第 5 行的 std::cout
结果看起来不错并且是非空的。
@ � �4 lbcrypto::LPCryptoParametersCKKSlbcrypto::DCRTPoly � @ �
^ 前几个字符(不确定是否有帮助)
稍后,我创建了一个字符数组并将 c_str
复制到其中(我认为)这避免了所讨论的临时结果问题
Don't attempt to store the pointer returned by c_str(). If you need that string as a C-string for an extended period of time, allocate memory buffer for it yourself and copy the result of c_str() to that buffer.
我还发现了 string_repr
对象是否被破坏了,所以我在第 9 行做了一个 std::cout,它看起来也不错。
谁能帮帮我?我真的不确定问题出在哪里。不幸的是,我需要将 char * []
传递给 PyBytes_FromString
,尽管这个名字可能让人联想到
推测字符串包含一个或多个 nul
个字符,导致 strcpy()
没有复制所有字节。在您 return 从函数中释放 cstr
之前,您还存在内存泄漏。
您可以通过绕过不必要的字符串数组并调用 PyBytes_FromStringAndSize
:
return PyBytes_FromStringAndSize(string_repr.c_str(), string_repr.size());