c语言 - K&R 第 6 章中的 strdup() 在未分配 sizeof(char) * strlen(s) 位时如何工作?



在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给出。

最新更新