首页 > 解决方案 > '\0' 是否占用字符的大小?- C

问题描述

所以我正在创建一个 char 到 string 转换器,我正在使用malloc. 我知道我需要为空终止字符腾出空间\0。我也这样做char *example = malloc(sizeof(char) + 1);(即\0占用 1 个字节)或char *example = malloc(2 * sizeof(char));(即\0占用一个字符的大小)。那么占用多少空间\0呢?

编辑:我刚刚意识到它是一样的,谢谢大家!

标签: cnull-terminated

解决方案


只是为了强调评论中指出的一些内容:

[确实]'\0'占用 1 个字节 [或者它] 占用了char

这些是相同的,因为 achar是一个字节定义sizeof(char) == 1无论您对 C 的实现是什么,都将永远是正确的。

malloc写电话的惯用方式是

malloc(1 + 1);  /* one character, + terminating NUL */

您唯一应该sizeof(char)在代码中编写的情况是,如果您需要强制表达式具有 type ,但由于某些奇怪的原因size_t您不能包含。stddef.h

(尽管不太可能,achar大于一个八位字节,也就是说,它包含多于 8 位。例如,PDP-10 的 C 实现可能会char包含 9 位,并且有一直是面向字的处理器,char必须是 16 位或 32 位。在这样的实现中,仍然sizeof(char)是1,并且 a仍然被认为与“字节”相同,但宏(定义在 中)将有一个值大于 8。charCHAR_BITlimits.h

不可能包含少于8 位,因为要求 achar能够表示数字范围 -127 ≤ x ≤ +127,这不适合 7 位。)char


推荐阅读