【问题标题】:C++: assign two values to char** in one line?C ++:在一行中为char**分配两个值?
【发布时间】:2013-05-08 10:04:08
【问题描述】:

我尝试一次分配两个 c 字符串:

 char **pair = {"name","joe"};

但我收到错误消息:

 'initializing' : cannot convert from 'const char [5]' to 'char **'

但我认为以前类似的方法对我有用?

【问题讨论】:

标签: c++


【解决方案1】:

这里给出的所有答案都是正确的。选择什么取决于上下文:

  1. 如果您从未在运行时更改字符串,请采用 Joachim Pileborg 的方法
  2. 如果您出于某种原因知道字符串具有固定长度,请选择 Arun 的
  3. 如果 1 或 2 都不是,请选择 Peter Wood's。请注意,

    vector<string> field = { "name", "joe" };
    

    需要 C++11

【讨论】:

    【解决方案2】:

    const char *pair[] = { "name", "joe" };

    这是最好的解决方案

    【讨论】:

      【解决方案3】:

      使用 C++ 工具,它将为您省去一个痛苦的世界:

      vector<string> field = { "name", "joe" };
      

      虽然你可能需要:

      pair<string, string> field("name", "joe");
      

      或者更好,可能:

      struct Person {
          Person(const string& name) : name(name) {}
          const string name;
      };
      
      Person boss("joe");
      

      【讨论】:

        【解决方案4】:

        Joachim 方法创建只读字符串。这就是创建 const 字符串字面量数组的方式。

        换一种方式,

        // MAX_LEN being the max string length.
        char pair[][MAX_LEN] = {"name","joe"}; // This makes pair read-writeable, 
        

        【讨论】:

          【解决方案5】:

          你声明了一个指向指针的指针,但初始化器是一个指针的数组

          const char *pair[] = { "name", "joe" };
          

          如前所述,我在声明中添加了 const 关键字。这是因为指针是指向字符串字面量的指针,而字面量是常量,不能更改。添加 const 有助于程序员不会错误地更改数组中的字符串。

          【讨论】:

          • +1 表示还注意到const 的使用。是否值得在答案中解释这一点?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-20
          • 1970-01-01
          • 2018-02-03
          • 2019-11-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多