下面的一段代码给出了错误:“'char []' 的初始值设定项太多”:
int main()
{
int input;
char numbers[] = {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
std::cin >> input;
std::cout << ((input > 9) ? "Greater than 9" : numbers[input-1]) << std::endl;
}
这个工作需要的是 numbers
是一个指针变量,即:
char * numbers[] = {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
我是 C++ 的新手,我想了解为什么这个数组需要是一个指针,以及内存中到底发生了什么需要它是一个指针?
在 Java 等其他语言中,您可以执行以下操作:
import java.util.Scanner;
public class Playground
{
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
int input = scanner.nextInt();
String[] numbers = {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
System.out.println((input > 9) ? "Greater than 9" : numbers[input-1]);
}
}
这里不需要指针,据我所知,在这种情况下也不需要它们。
最佳答案
因为字符串是字面值,即常量,你应该这样声明数组:
const char* numbers[] = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
这是在编译时定义数组的 C 方法。所以数组需要的内存是编译器计算出来的。因此,您必须将其声明为 const char* 数组,即内容不能更改,因为它是在编译时定义的。
你可以这样声明数组:
char numbers[9][6] = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
它所做的是声明一个包含 9 个元素的二维数组,每个元素包含 6 个字符。所以现在您可以根据需要在运行时更改每个单词的值。方括号 [] 让一切变得不同。当您使用 char*[] 时,编译器会将元素视为文字。
如果事先不知道数组中每个单词的大小,则必须在堆上分配它们。
C++ 方法是使用 std:string(在内部为您分配在堆上),这些可以在运行时更改:
std::string numbers[] = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
关于c++ - Char 数组指针和 "error: too many initializers for ' char [ ]'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56699978/