【问题标题】:Can't initialize char array to a variable in c无法将char数组初始化为c中的变量
【发布时间】:2018-05-11 14:15:30
【问题描述】:

使用 Turbo c++ 初始化 char 变量数组时得到如下错误代码

int gd=DETECT,gm,i,d=0,x,y;
char s[12]={"3","4","5","6","7","8","9","10","11","12","1","2","\0"};
initgraph(&gd,&gm,"..\\BGI");

但在用于初始化 s[12][3] 时,初始化列表工作正常!

【问题讨论】:

  • 是的,所以? {"3","4","5","6","7","8","9","10","11","12","1","2","\0"}; 不是字符数组。你还期望发生什么?另外仅供参考,Microsoft DOS 没有未来,获得现代编译器。
  • 这是 C 还是 C++?
  • Bathsheba 它是 turbo c++ 中的 c 程序。解决了这个问题。谢谢大家
  • 一些酒吧测验琐事:'3' & c。在 C 中是 int 类型,在 C++ 中是 char 类型。

标签: c arrays string char initialization


【解决方案1】:

"3"'3' 之间存在差异。

  • "3" 是字符串文字
  • '3' 是一个字符常量(到 nitpick:整数字符常量)

在这里,要初始化char 类型的数组,您似乎需要(用大括号括起来的)字符常量列表,而不是字符串。

但是在使用 s[12][3] 时效果很好

嗯,你正在初始化数组

故事的寓意:如有疑问,请检查数据类型!

【讨论】:

    【解决方案2】:

    您试图存储chars,而不是字符串,那么为什么要使用双引号?

    "a" 是一个字符串,'a' 是一个字符。

    您真正想要存储的是字符串,为此您需要一个二维数组,如下所示:

    s[12][3] = {"3","4","5","6","7","8","9","10","11","12","1","2"};
    

    您不能将 10 表示为单个字符,我的意思是 '10' 不存在。当涉及到数字时,单个字符是从 0 到 9。因此,您需要一个 10 的字符串,例如 "10"

    现在,您需要数组的第二维为 3,因为字符串 "10"(例如)是一个以 null 结尾的字符串,因此其实际内容为 2 个字符,加上一个为 null 终止符,给出为 3。


    PS:Turbo-C++ 是一个古老的编译器。升级到 GCC 或其他任何东西,真的。

    【讨论】:

      【解决方案3】:

      你需要改变:

      char s[12]={"3","4","5","6","7","8","9","10","11","12","1","2","\0"};
      

      char s[13]={'3','4','5','6','7','8','9','10','11','12','1','2','\0'};
      

      因为 char 数组元素应该是 char 文字而不是字符串文字

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-12
        • 1970-01-01
        • 1970-01-01
        • 2017-05-02
        • 1970-01-01
        • 2021-04-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多