C++ 字符[9][9]的初始值设定项过多

C++ 字符[9][9]的初始值设定项过多,c++,arrays,C++,Arrays,但问题是,在我声明的char数组中,有确切数量的初始值设定项 char dash[9][9]={ {"1","2","3","4","5","6","7","8","9"}, {"a","b","c","d","e","f","g","h","i"}, {"q","w","e","r","t","y","u","i","o"}, {"9","8","7","6","5","4","3","2","1"}, {"i",

但问题是,在我声明的char数组中,有确切数量的初始值设定项

char dash[9][9]={
        {"1","2","3","4","5","6","7","8","9"},
        {"a","b","c","d","e","f","g","h","i"},
        {"q","w","e","r","t","y","u","i","o"},
        {"9","8","7","6","5","4","3","2","1"},
        {"i","h","g","f","e","d","c","b","a"},
        {"o","i","u","y","t","r","e","w","q"},
        {"z","x","y","w","v","u","t","s","r"},
        {"a","l","l","s","t","a","r","p","y"},
        {"m","o","n","d","o","l","o","r","i"}
    };

共有九行九列。我有什么问题?我查看了其他论坛和本论坛的答案,但没有找到任何有用的答案。

您需要将所有双引号
更改为单引号

否则,它们是字符串,而不是
char
s


在这种情况下,一个简单的查找和替换就可以了。

您正在用字符串而不是字符初始化数组,因此每个元素都试图放入字符和空终止符。尝试“1”、“2”、“3”等。请改用单引号:

char dash[9][9]={
    {'1','2','3','4','5','6','7','8','9'},
    {'a','b','c','d','e','f','g','h','i'},
    {'q','w','e','r','t','y','u','i','o'},
    {'9','8','7','6','5','4','3','2','1'},
    {'i','h','g','f','e','d','c','b','a'},
    {'o','i','u','y','t','r','e','w','q'},
    {'z','x','y','w','v','u','t','s','r'},
    {'a','l','l','s','t','a','r','p','y'},
    {'m','o','n','d','o','l','o','r','i'}
};

如果你使用双引号,它是这样做的

char dash[9][9] =
{
    "123456789",
    "abcdefghi",
    "qwertyuio",
    "987654321",
    "ihgfedcba",
    "oiuytrewq",
    "zxywvutsr",
    "allstarpy",
    "mondolori"
};
否则,请使用单引号。请注意,您可能会收到如下警告:

error: initializer-string for array of chars is too long [-fpermissive]

从G++4.6.2(编译器选项
-Wall-Wextra
)。

您不应该使用单引号
'
而不是双引号

将字符更改为char*并保留双引号。当您想将其用作字符时,请将其转换回字符。这样您就可以同时拥有字符和字符数组(字符串)。

将字符串
(“”
更改为字符,使用单引号
(')

char dash[9][9]={
        {'1','2','3','4','5','6','7','8','9'},
        {'a','b','c','d','e','f','g','h','i'},
        {'q','w','e','r','t','y','u','i','o'},
        {'9','8','7','6','5','4','3','2','1'},
        {'i','h','g','f','e','d','c','b','a'},
        {'o','i','u','y','t','r','e','w','q'},
        {'z','x','y','w','v','u','t','s','r'},
        {'a','l','l','s','t','a','r','p','y'},
        {'m','o','n','d','o','l','o','r','i'}
    };

谢谢你,Johnathon,我不应该试图简化我的答案。C允许一个代码> Car(9)< /C>数组,用长度为9的字符串文字初始化,结果数组不是空的终止(也就是它不是字符串)。C++不允许这样做,而G++以外的编译器完全可以拒绝代码。(另外,字符串文本之间需要逗号;否则,实际上只有一个81个字符的文本。我将继续添加逗号。)有趣的想法-更改声明符而不是初始值设定项。当然,如果需要
char
,您不会强制转换任何内容;您应该取消对数组中
char*
的引用:
*dash[i][j]
甚至
dash[i][j][0]
?此解决方案将大幅增加阵列所需的存储空间,从81个字节增加到“81个指针加上81个字符串,每个字符串2个字节”(存储空间是原来的6倍或10倍,具体取决于您使用的是32位还是64位系统)。是的,我提出这个建议只是为了说明还有另一种方法可以操作数组。但当然,我同意引入指针时会有额外的存储成本。将
char*
强制转换为
char
会给您一些实现定义的值,可能是内存地址的低阶字节。这有什么用处L