char [9] [9]的初始化程序太多[重复]
Posted
技术标签:
【中文标题】char [9] [9]的初始化程序太多[重复]【英文标题】:Too many initializers for char[9][9] [duplicate] 【发布时间】:2012-01-31 11:25:42 【问题描述】:但问题是,我声明的 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"
;
有九行九列。我的问题是什么?我检查了其他论坛和这个论坛的答案,但没有发现任何帮助。
【问题讨论】:
【参考方案1】:从字符串(")
更改为字符,改用单引号(')
。
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'
;
【讨论】:
【参考方案2】:如果你使用双引号,它是这样完成的......
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
)。
【讨论】:
谢谢乔纳森,我不应该试图缩短我的答案。 C 允许char[9]
数组使用长度正好为 9 的字符串字面量进行初始化;结果数组不是以空值结尾的(即,它不是字符串)。 C++ 不允许这样做,而 G++ 以外的编译器很可能完全拒绝该代码。 (此外,字符串文字之间需要逗号;否则,您实际上只有一个 81 个字符的文字。我将继续添加逗号。)【参考方案3】:
你不应该使用单引号'
而不是双引号"
吗?
【讨论】:
【参考方案4】:将 char 更改为 char* 并保留双引号。当您想将其用作角色时,请将其作为角色回退。这样您就可以同时拥有字符和字符数组(字符串)。
【讨论】:
有趣的想法——改变声明器而不是初始化器。当然,当你想要char
时,你不会投任何东西;你会取消引用数组中的char *
:*dash[i][j]
甚至dash[i][j][0]
?该解决方案将显着增加数组所需的存储空间,从 81 个字节增加到“81 个指针加上 81 个每个 2 字节的字符串”(存储空间的 6 倍或 10 倍,具体取决于您使用的是 32 位还是 64 位系统)。
是的,我提出这个建议只是为了表明还有另一种操作数组的方法。但是,我当然同意在引入指针时会有额外的存储成本。
将char*
转换为char
将为您提供一些实现定义的值,可能是内存地址的低位字节。这有什么用?【参考方案5】:
改用单引号:
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'
;
【讨论】:
【参考方案6】:您正在使用字符串而不是字符初始化数组,因此每个元素都试图适应字符和空终止符。尝试“1”、“2”、“3”等。
【讨论】:
【参考方案7】:您需要将所有双引号 ""
更改为单引号 ''
。
否则,它们是字符串而不是char
s。
在这种情况下,一个简单的查找和替换应该可以解决问题。
【讨论】:
以上是关于char [9] [9]的初始化程序太多[重复]的主要内容,如果未能解决你的问题,请参考以下文章