什么是C ++中数组的初始化程序?

时间:2018-09-30 15:35:20

标签: c++ arrays

我正在用C ++学习数组。我创建了一个数组,但出现错误:

  

char [5]中的初始化程序太多。

我的代码:

#include <iostream>
#include <vector>
#include <fstream>
#include <string>

using namespace std;

int main() {
  char myName[6][5] = {{'A', 'd', 'i', 't', 'y', 'a'},
                       {'S', 'i', 'n', 'g', 'h'}};
  cout << "The 1st letter in the 1st array is " << myName[0][0] << endl;
  return 0;
}

当我将char myName[6][5]替换为myName[6][6]时,即使数组有5个字母,也不存在错误。

如何摆脱错误?

1 个答案:

答案 0 :(得分:2)

您的声明

char myName[6][5]

声明一个由五个字符组成的六个数组。它不是两个分别由6个字符和5个字符组成的数组。您有数组myName[0]myName[5]

由于myName中的每个子数组只有五个字符,所以很容易理解为什么您会出错,因为第一个元素myName[0]是用六个元素初始化的。

如果要使用 strings ,则首先应使用std::string,如

std::string myNames[] = { "Aditya", "Singh" };

或者如果您不允许使用std::string,请创建一个数组数组,其中每个子数组的长度足以容纳最长的字符串:

char myNames[][7] = { "Aditya", "Singh" };

请注意7的大小,因为C ++中的字符串实际上称为 空终止 字节字符串,并且以null结尾的是一个额外的字符,也需要空格。这意味着一串6个字符的空格需要7个字符才能适合终止符。