在 C编程语言中,通过KNR - 第2版,第6.5节,他们定义了一个函数strdup
,因此:
char *strdup(char *s)
{
char *p;
p = (char *) malloc(strlen(s) + 1) /* +1 for the '\0' */
if (p != NULL)
strcpy(p, s);
return p;
}
用法是将字符串复制到由此定义的结构tnode
的成员上:
struct tnode {
char *word;
int count;
struct tnode *left;
struct tnode *right;
};
这样称呼:
struct tnode *addtree(struct tnode *p, char *w)
{
...
p->word = strdup(w);
...
}
为什么我们不能使用这样的东西?
strcpy(p->word, w);
答案 0 :(得分:3)
首先,您需要为p->word
分配内存,然后您可以使用strcpy(p->word, w);
,因为word
是char
指针,之前没有为其分配内存。
因此,如果您在不分配内存的情况下致电strcpy(p->word, w);
,则会导致Undefined behavior.
答案 1 :(得分:3)
如果使用"类似"
strcpy(p->word, w);
然后程序将具有未定义的行为,因为1)p-> word未初始化并且具有任何未指定的值; 2)此语句试图写入未分配的内存。
如果您要分配内存并使用内存的有效地址初始化p->字,然后使用"类似"
strcpy(p->word, w);
然后事实上你会自己编写strdup
的相同实现。