我有一個需要存儲const char *的結構體供以後使用。該字符串在那時被破壞。我有到現在爲同一代碼是在C++中const char *的字符串將垃圾放在結尾
HttpRequest* send(string reply)
{
int len = strlen(reply.c_str());
char *buffer = new char[len+1];
strncpy(buffer, reply.c_str(), len);
cout << "LEN:"<<reply.length()<<endl;
cout << "OG:"<<reply<<endl<<"TC:"<<buffer<<endl<<"CS"<<reply.c_str()<<endl;
this->res.response = "test";
return this;
};
res.response
是的char *,我要值存儲在從我得到COUT輸出。是
LEN:5
OG:hello
TC:hello�������������������q{
CShello
此行爲對我來說很奇怪。有人可以請解釋我做錯了什麼。此外上面的代碼顯示我使用strlen
,但我在C++中也使用length()
也得到了相同的結果。
另外值得一提的是,這種情況只發生在我第一次調用它之後,它會很好。
[FYI]'的strlen(reply.c_str());'可以用'@NathanOliver我提到也reply.size()' – NathanOliver
代替。我認爲錯誤的原因是,所以我發佈了我使用strlen的代碼的最後一個副本:) – georoot
啊。我想知道爲什麼在代碼中稍後使用'length',但是你沒有使用它作爲字符串的大小。還有是你需要將字符串複製到char數組的原因嗎?由於您從未刪除緩衝區,因此您創建了內存泄漏。 – NathanOliver