C 数组初始化

标签 c arrays initialization

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

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

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

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

最佳答案

是的,您需要自己添加一个终止符“\0”(顺便说一句,不是 NULL)——C 仅对字符串文字 执行此操作,而不是对任何数组执行此操作。

例如-

char* str = "12345";

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

同样适用于-

char str[] = "12345";

它将有 6 个项目。

但是-

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

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

(在问题的初始化中,您已经有了一个“\0”,所以您不需要其他任何东西)。

关于C 数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4471541/

相关文章:

C - strcpy 有什么特殊属性吗?

c - 从 C 到 gnuplot 的曲面绘图管道

c - 使用 Horner 方法求多项式导数的函数错误在哪里?

c++ - 为什么这两种多维数组的实现执行时间相差这么大呢?

c# - C# 中的数组串联

c++ - 对象 A 中的对象 B 和对象 B 中对象 A 的引用,没有指针

c - 为什么 ARM gcc 在函数开始时将寄存器 r3 和 lr 压入堆栈?

javascript - 同时对多个数组进行排序

c - 在二维数组中分配内存时出现问题

iOS 指定初始化器 : Using NS_DESIGNATED_INITIALIZER