使用new运算符在声明时初始化char *

时间:2017-10-28 06:57:25

标签: c++ c++11

c ++代码

char *ptr=new char("char_pointer_initialization");

抛出

error Invalid conversion from 'const char*' to 'char' [-fpermissive]

我该如何解决?

2 个答案:

答案 0 :(得分:3)

该行

char *ptr=new char("char_pointer_initialization");

尝试分配单个char并使用const char*对其进行初始化,从而显示错误消息。

与没有new

的声明不同
char arr[] = "char_pointer_initialization";

使用charnew数组进行内联初始化的唯一方法是编写

char *ptr=new char[40]{ 'c', 'h', 'a', 'r', '_', 'p', ..., '\0' };

查看working example

我建议改用std::string,这样你就可以简单地写

std::string s = "char_pointer_initialization";

如果您需要const char*,则可以使用std::string::c_str()功能。

答案 1 :(得分:0)

我建议你阅读有关新表达的内容。如果您有类似

的内容
new type(value)

这意味着

  1. 分配给定类型的单个对象
  2. 使用给定值
  3. 初始化它

    在你的情况下,你有

    new char("char_pointer_initialization");
    

    所以你试图分配一个char并用" char_pointer_initialization"初始化它。这是一个指向const char的指针。这就是你解决invalid conversion from cost char* to char错误的原因。

    除了使用std :: string之外,为了解决您的问题,您需要使用operator new(new [])的数组版本,然后复制字符串。