在 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】:

所有变量的空间都是在编译时分配的。您要求编译器为名为@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 讨论与聚合初始化相关的规则。

【讨论】:

以上是关于在 C++ 中使用变量声明数组的主要内容,如果未能解决你的问题,请参考以下文章

C++中的动态数组声明

C++变量类型

c++ 中如何声明一个 int 变量

C++初级教程

现代c++实践:变量声明强化,竟然可以在if/switch中定义变量!

C++中const关键字的使用总结