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

问题描述

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

编辑:我刚刚意识到这是相同的,谢谢大家!

解决方法

仅在注释中强调以下内容:

[确实] '\0'占用1个字节[或确实]占用char的大小

这是同一回事,因为根据定义,char是一个字节。不管您使用C的什么实现,sizeof(char) == 1永远都是正确的。

malloc通话的惯用方式是

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

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

char可能大于一个 octet ,即它包含八个以上的位,这是可能的,尽管这种可能性很小。 PDP-10的实现可能会使char包含9位,并且有面向字的处理器,其中char必须为16或32位。在这种实现中,sizeof(char) still 1,并且char仍被视为与“字节”相同,但是宏CHAR_BIT(在limits.h中定义)将具有大于8的值。

char少于少于8位是不可能,因为要求char才能表示数值范围−127≤x≤+127,不适合7位。)

,

'\0'占用一个字节的空间。您可能想malloc(length_of_string + 1)

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