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】:

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

否则,它们是字符串而不是chars。

在这种情况下,一个简单的查找和替换应该可以解决问题。

【讨论】:

以上是关于char [9] [9]的初始化程序太多[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Excel生成不重复的8位随机码

Excel生成不重复的8位随机码

如何在c#中将十六进制从char []转换为int [重复]

微信小程序初体验遇到的坑

如何用空值初始化这种形式的数组? (Java)[重复]

码头 9.0.3 中的 Close_wait 太多