在K&R第6章中,他们有函数strdup(char *s)
,旨在将s
复制到内存中并返回其位置,p
。
/* strdup: make a duplicate of s */
char *strdup(char *s) {
char *p;
p = (char *)malloc(strlen(s) + 1); /* plus one for ' ' */
if (p != NULL)
strcpy(p, s);
return p;
}
但是,在malloc
调用中,它们仅分配strlen(s) + 1
字节。为了使这个字符数组工作,它不必是:malloc(sizeof(char) * (strlen(s) + 1))
?
sizeof(char)
保证是1
的,所以
malloc( sizeof(char) * ( strlen(s) + 1 ) )
简化为
malloc( strlen(s) + 1 )
注意:
sizeof
返回以字节(而不是位(为单位的大小。malloc
需要以字节为单位的大小(而不是位(。- 一个字节(
char
(可以有超过8位。(金额由CHAR_BIT
给出。