在 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 '\0' */
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
给出。)
关于c - K&R 第 6 章中的 strdup() 在未分配 sizeof(char) * strlen(s) 位时如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62648943/