'\0' 是否占用一个字符的大小? - C

Does '\0' Take Up The Size of a Char? - C

所以我正在创建一个字符到字符串转换器,我正在使用 malloc 创建一个字符串。我知道我需要为空终止字符 [=11=] 创建 space。所以我做char *example = malloc(sizeof(char) + 1);(即[=11=]占用1个字节)或char *example = malloc(2 * sizeof(char));(即[=11=]占用一个字符的大小)。那么[=11=]占了多少space呢?

编辑: 才发现原来是一样的,谢谢大家!

'[=10=]'占space的一个字节。你可能想要 malloc(length_of_string + 1)

所以对于 "abc",您将总共分配 4 个字节。

只是强调评论中指出的内容:

[does] '[=11=]' take up 1 byte [or does it] take up the size of a char

这些是一回事,因为char根据定义是一个字节sizeof(char) == 1 将永远为真,无论您的 C 实现是什么。

编写 malloc 调用的惯用方法是

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

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

char 有可能比一个 八位字节 大——也就是说,它包含超过八位。例如,PDP-10 的 C 实现可能会使 char 包含九位,并且已经有 word-oriented 处理器,其中 char 必须是 16 或 32 位。在这样的实现中,sizeof(char)还是1,而一个char仍然被认为是一个“字节”,但是宏CHAR_BITlimits.h) 中定义的值将大于 8。

不可能 char 包含 少于 八位,因为 char要求能够表示数值范围 −127 ≤ x ≤ +127,这不适合七位。)