【问题标题】:Declaring array using a variable in C++在 C++ 中使用变量声明数组
【发布时间】:2010-08-22 03:46:37
【问题描述】:

我正在编写一个需要输入文本并修改单个字符的程序。我通过使用一个字符数组来做到这一点,就像这样:

char s[] = "test";
s[0] = '1';
cout << s;

(Returns: "1est")

但如果我尝试使用变量,像这样:

string msg1 = "test";
char s2[] = msg1;
s2[0] = '1';
cout << s1[0]

我收到一个错误:error: initializer fails to determine size of 's2'

为什么会这样?

【问题讨论】:

    标签: c++ arrays string


    【解决方案1】:

    C 风格的数组需要字面量值进行初始化。为什么要使用 C 风格的数组?为什么不直接使用 std::string...

    string msg1 = "test";
    string s2 = msg1;
    s2[0] = '1';
    cout << s2[0];
    

    【讨论】:

      【解决方案2】:

      所有变量的空间都是在编译时分配的。您要求编译器为名为@9​​87654321@ 的字符数组分配空间,但没有告诉它要花多长时间。

      这样做的方法是声明一个指向char的指针并动态分配它:

      char *s2;
      
      s2 = malloc(1+msg1.length()); // don't forget to free!!!!
      s2 = msg1; // I forget if the string class can implicitly be converted to char*
      
      s2[0] = '1'
      
      ...
      free(s2);
      

      【讨论】:

        【解决方案3】:

        我认为 char a[] 不能由字符串初始化。 编辑:“a string”实际上是一个 c 类型的字符串(字符数组以 '\0' 结尾)。

        【讨论】:

        • 如果不能用字符串初始化,应该用什么代替?
        • std::string 没有返回 char* 数组的 c_str() 方法吗? (我不是在看文档......这里只是记忆)
        • C Johnson 的意思是使用 char a[] = msg1.c_str() 可以解决问题。
        • 它返回一个 const char *。 char 数组的初始值设定项必须是字符或可以转换为 char 的东西
        • 可以被一个字符串初始化,但它必须是一个常量字符串,其值在编译时是已知的,而不是某个表达式的结果。
        【解决方案4】:

        $8.5.1 和 $8.5.2 讨论与聚合初始化相关的规则。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-02
          • 2011-10-11
          • 2022-06-17
          • 2013-10-19
          • 1970-01-01
          相关资源
          最近更新 更多