use*_*280 -7 c++ pointers cstring
是否有任何方法可以将引用的字符串分配给指针,如下所示,而不将其转换为const char*?
char** p;
*p=new char[100];
*p="quoted_string\n";
Run Code Online (Sandbox Code Playgroud)
上面的问题p是现在是一个const字符串,我不能delete阻止它:
delete p[n]; //gives an error--- block_is_valid...
Run Code Online (Sandbox Code Playgroud)
我知道字符串文字,L"string"但我找不到任何东西来解决我的问题.
澄清:我明确表示我正在寻找一种在所提供的例子中处于简洁程度的方法.我知道我可以遍历字符串并复制它,但这不是我想要的.
对于那些对放置感到困惑的人delete,我用它来做这样的事情:
while(*p!=char_01) //this is not an example to be taken literally
{delete p; p++;}
Run Code Online (Sandbox Code Playgroud)
使用std::string:
std::string p;
p = "quoted_string\n";
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下命令删除字符
p.erase(p.begin() + n);
Run Code Online (Sandbox Code Playgroud)
代码的问题在于:
char* p;
p=new char[100];
p="quoted_string\n";
Run Code Online (Sandbox Code Playgroud)
100通过忘记动态分配的指针来泄漏字节存储器.也delete不宜用于从C风格的字符串,删除字符.
我还建议你在继续学习之前阅读一本书,因为你似乎缺乏C++的基础知识.
C++:
#include <string>
...
std::string str = "quoted_string\n";
Run Code Online (Sandbox Code Playgroud)
可能的C风格方法:
char str[] = "quoted_string\n";
Run Code Online (Sandbox Code Playgroud)
请注意,这些是任何好书中涵盖的基础:最终C++书籍指南和列表
另请注意,这L"string"不是您的想法.看看字符串文字.
带有动态分配缓冲区的丑陋C风格解决方案(!!!你真的不想这样做!!!):
#include <cstring>
...
char* str = new char[100]; // destination buffer
const char* src = "quoted_string\n"; // pointer to constant string literal
strcpy(str, src); // strlen(src) must be <= 99
...
delete[] str;
Run Code Online (Sandbox Code Playgroud)