问题描述
因此,我正在创建一个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个字节。