如何初始化二维数组的字符

时间:2015-04-12 18:08:24

标签: c++ arrays

我试图编写一个简单的名称生成器,但是我遇到了数组初始化问题。

  1. 为什么我不能像这样初始化2D数组?

    const char* alphab[2][26] ={{"ABCDEFGHIJKLMNOPQRSTUVWXYZ"}, 
    {"abcdefghijklmnopqrstuvwxyz"}};
    
  2. 它编译时没有错误和警告,但cout << alphab[0][5]没有打印任何内容。

    1. 为什么会这样

      class Sample{
          private:
          char alphnum[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
      }
      
    2. 为一个字符数组抛出&#34;初始化字符串太长&#34;错误,这个

      char alphnum[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
      class Sample{
      //code
      };
      

      没有按&#39;?吨

      这是我的代码

      class NameGen {
      
      private:
          string str;
          char arr[5];
          const char* alphab[2][26] = {{"ABCDEFGHIJKLMNOPQRSTUVWXYZ"},
              {"abcdefghijklmnopqrstuvwxyz"}
          };
      
      public:
          string genName()
          {
              srand(time(0));
              for (unsigned int i = 0; i < sizeof(arr); ++i) {
                  arr[i] = *alphab[(i > 0) ? 1 : 0][rand() % 25];
              }
              str = arr;
              return str;
          }
      } alph;
      
      int main()
      {
          cout << alph.genName() << endl;
          return 0;
      }
      

      没有警告和错误。输出为:分段错误(代码转储)

2 个答案:

答案 0 :(得分:2)

1的答案。

const char* alphab[2][26] ={{"ABCDEFGHIJKLMNOPQRSTUVWXYZ"},
                            {"abcdefghijklmnopqrstuvwxyz"}};

应该是

const char* alphab[2] ={{"ABCDEFGHIJKLMNOPQRSTUVWXYZ"},
                        {"abcdefghijklmnopqrstuvwxyz"}};

因为你没有指向char的指针的二维数组,而只是一个指向指向字符的一维数组。这条线

arr[i] = *alphab[(i>0) ? 1: 0][rand() % 25];
然后

应更改为

arr[i] = alphab[(i>0) ? 1: 0][rand() % 25];

直播示例here

2的答案。

计算字符数并为\0字符添加额外的字符数。您不能将零大小的数组作为成员变量,因此必须指定长度,例如

char alphnum[5] = "test";

答案 1 :(得分:0)

试试这个:

char alphab[2][27] = { 
    {"abcdefghijklmnopqrstuvwxyz"}, 
    {"ABCDEFGHIJKLMNOPQRSTUVWXYZ"}
};

注意使用char和char *。 char *可以自己制作一系列字符! 为\ n。

留出一个额外的单位

您现在可以轻松引用alphab。

Cout<< alphab[1][5] ;    //you will get 'F'