将非const引用的字符串分配给char*?

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)

Sho*_*hoe 6

使用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++的基础知识.

  • 谁能解释一下downvote吗? (3认同)

Lih*_*ihO 5

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)