我正在编写一个需要输入文本并修改单个字符的程序。我这样做是通过使用一个字符数组,如下所示:
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'
为什么会这样?
答案 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讨论与聚合初始化相关的规则。