【问题标题】:C Array InitializationC 数组初始化
【发布时间】:2010-12-17 14:43:15
【问题描述】:

我很好奇 C 如何处理数组初始化。我的程序中有以下代码:

UChar match[] = {0xdf, 'a', 'b', '\0'};

基本上,这是初始化一个 UTF-16 字符串。在这种情况下,UChar 是 16 位。

我的问题是:我需要字符串末尾的尾随 NULL 字节,但必须将其包含在初始化中,还是 C 会自动将其包含在所有数组初始化中?

【问题讨论】:

  • 取决于数组是否固定。

标签: c arrays initialization


【解决方案1】:

是的,您需要自己添加一个终止符 '\0'(顺便说一下,不是 NULL) - C 仅对 字符串文字 这样做,而不是对任何数组。

例如-

char* str = "12345";

将是一个包含 6 个字符的数组,第六个是 '\0'。

同样适用 -

char str[] = "12345";

它将有 6 个项目。

但是-

char str[] = { '1', '2', '3', '4', '5' };

将正好有 5 个项目,没有终止的 '\0'。

(在问题的初始化中,你已经有一个'\0',所以你不需要别的)。

【讨论】:

    【解决方案2】:

    如果您想将 char 数组作为字符串操作,那么您将需要终止字符。

    【讨论】:

      【解决方案3】:

      如果您不想为字符串显式添加\0,您可以这样做 假设你知道你的字符串包含5 字母然后创建一个这样的数组

      char str[6]={'h','e','l','l','o'};
      

      我的观点是,即使您对数组进行了一半初始化,其余值也会用0s 填充。 比如

      int arr[5]={1,2,3};
      

      现在如果你这样做了

      printf("%d",a[3]);    or     printf("%d",a[4]);
      

      两者都是0。

      【讨论】:

        猜你喜欢
        • 2013-05-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-21
        • 2018-01-15
        • 2013-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多