【问题标题】:What happens if the amount of characters that are entered into your character array is less than the amount of spaces you specified如果输入字符数组的字符数量少于您指定的空格数量会怎样
【发布时间】:2017-12-10 18:04:54
【问题描述】:
char ch_arry[20] = { S, A, L, L, Y};
printf( "%s", ch_arry[] );

它会用空字符填充数组的末尾吗?

【问题讨论】:

  • 最后15个字符的内容未定义。
  • 不是这样,@David。 C 没有部分初始化。
  • 请注意,您需要 'S', 'A', 'L', 'L', 'Y',除非您有宏 SALY,它们映射到适用于初始化字符的整数常量。
  • @JonathanLeffler - 或具有相同名称的变量
  • @KevinDTimm:这取决于变量的定义位置。在函数内部,是的。在文件范围内——没有。

标签: c arrays character project


【解决方案1】:

您回答了自己的问题。

剩下的 15 个字符将被赋值为空值。

而且你声明数组错误...如果你想要 ch_array = SALLY,你应该对你的每个角色使用单引号(像这样的'S')。

对于输出使用 printf("%s", ch_arry);而不是 printf("%s", ch_arry[]);

【讨论】:

    【解决方案2】:

    来自 C 标准(6.7.9 初始化)

    19 初始化应按初始化列表顺序进行,每个 为覆盖任何特定子对象提供的初始化程序 先前列出的同一子对象的初始化程序;151) 全部 未显式初始化的子对象应被初始化 与具有静态存储持续时间的对象隐式相同

    10 如果具有自动存储时长的对象未初始化 明确地说,它的值是不确定的。如果一个物体有静电 或者线程存储时长没有显式初始化,则:

    ——如果是指针类型,则初始化为空指针;

    ——如果是算术类型,则初始化为(正数或 无符号)零;

    ——如果是聚合,每个成员都根据这些规则(递归地)初始化,并且任何填充都被初始化为零 位;

    如果你有这样的声明

    char ch_arry[20] = { 'S', 'A', 'L', 'L', 'Y'};
    

    那么数组中所有未显式初始化的元素都将被隐式初始化为零。

    【讨论】:

    • 赞成 - 我喜欢你的参考质量答案。您的标准副本显然很受欢迎。
    • @Bathsheba 谢谢。:)
    • 另请注意§6.7.9 21--“如果大括号括起来的列表中的初始化程序少于聚合的元素或成员,或者用于初始化数组的字符串文字中的字符更少已知大小而不是数组中的元素,则聚合的其余部分应隐式初始化,与具有静态存储持续时间的对象相同。"
    【解决方案3】:

    其余 15 个字符设置为 \0。这是 C 的一个有用特性。

    注意,你需要使用

    char ch_arry[20] = { 'S', 'A', 'L', 'L', 'Y'};
    

    除非你有一些疯狂的宏诡计,并且

    printf("%s", ch_arry);
    

    【讨论】:

      猜你喜欢
      • 2015-08-21
      • 1970-01-01
      • 2015-12-19
      • 2017-07-08
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多