在 C++ 中使用变量声明数组
Posted
技术标签:
【中文标题】在 C++ 中使用变量声明数组【英文标题】:Declaring array using a variable in 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'
为什么会这样?
【问题讨论】:
【参考方案1】:C 风格的数组需要字面量值进行初始化。为什么要使用 C 风格的数组?为什么不直接使用 std::string...
string msg1 = "test";
string s2 = msg1;
s2[0] = '1';
cout << s2[0];
【讨论】:
【参考方案2】:所有变量的空间都是在编译时分配的。您要求编译器为名为@987654321@ 的字符数组分配空间,但没有告诉它要花多长时间。
这样做的方法是声明一个指向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 讨论与聚合初始化相关的规则。
【讨论】:
以上是关于在 C++ 中使用变量声明数组的主要内容,如果未能解决你的问题,请参考以下文章