我很好奇 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/