在C ++中使用变量声明数组

时间:2010-08-22 03:46:37

标签: c++ arrays string

我正在编写一个需要输入文本并修改单个字符的程序。我这样做是通过使用一个字符数组,如下所示:

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'

为什么会这样?

4 个答案:

答案 0 :(得分:4)

C样式数组需要文字值进行初始化。为什么要使用C风格的数组呢?为什么不使用std :: string ...

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

答案 1 :(得分:2)

所有变量的空间在编译时分配。您要求编译器为名为s2的字符数组分配空间,但不告诉它有多长时间。

这样做的方法是声明一个指向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);

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

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