【问题标题】:Difference ways to initialize char array初始化char数组的不同方法
【发布时间】:2018-09-08 06:10:31
【问题描述】:

用大括号中的字符串初始化char数组和不使用大括号有什么区别?

char arr[] = {"string"};

char arr[] = "string";

【问题讨论】:

    标签: c arrays string initialization


    【解决方案1】:

    没有区别。这由 C99 直接解决,6.7.8 初始化

    1. 字符类型的数组可以由字符串字面量初始化,可选 括在大括号中。字符串文字的连续字符(包括 如果有空间或数组大小未知,则终止空字符)初始化 数组的元素。

    (强调我的。)

    【讨论】:

      【解决方案2】:

      虽然 Melpomene 对标准的引用是唯一确定的答案,但以下内容可能会很有启发性:

      要初始化一个数组,可以将初始化的元素写在大括号之间,用逗号分隔,例如:

      int array[] = {0, 1, 2, 3, 4};
      

      要初始化一个字符数组,可以这样写:

      char array[]= = {'s', 't', 'r', 'i', 'n', 'g', '\0'};
      

      但为方便起见,标准允许:

      char array[] = "string";
      

      为了与前面显示的表格兼容,该标准还允许:

      char array[] = { "string" };
      

      【讨论】:

      • 更多启发:使用更少空间的字符串数组:char * array[] = {"string1", "longerstring", "short"}。这与char array[3][20] 不同。
      • 好吧,标准还允许int i = { 0 };char c = { 'X' };(“标量的初始化程序应该是单个表达式,可选地用大括号括起来。”)。可能是为了兼容。
      猜你喜欢
      • 2017-09-09
      • 2013-09-12
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      • 2019-06-24
      • 2011-04-18
      • 2017-05-02
      • 2015-05-12
      相关资源
      最近更新 更多