'\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_BIT
( limits.h
) 中定义的值将大于 8。
(不可能 char
包含 少于 八位,因为 char
要求能够表示数值范围 −127 ≤ x ≤ +127,这不适合七位。)
所以我正在创建一个字符到字符串转换器,我正在使用 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 achar
这些是一回事,因为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_BIT
( limits.h
) 中定义的值将大于 8。
(不可能 char
包含 少于 八位,因为 char
要求能够表示数值范围 −127 ≤ x ≤ +127,这不适合七位。)