C语言中strdup()函数的目的是什么?
当前回答
来自strdup man:
strdup()函数将返回一个指向新字符串的指针,该指针是s1所指向的字符串的副本。返回的指针可以传递给free()。如果不能创建新的字符串,则返回空指针。
其他回答
它所做的最有价值的事情是为您提供与第一个相同的另一个字符串,而不需要您自己分配内存(位置和大小)。但是,如前所述,您仍然需要释放它(但这也不需要进行数量计算)。
来自strdup man:
strdup()函数将返回一个指向新字符串的指针,该指针是s1所指向的字符串的副本。返回的指针可以传递给free()。如果不能创建新的字符串,则返回空指针。
Strdup()对包含结束字符'\0'的字符数组进行动态内存分配,并返回堆内存地址:
char *strdup (const char *s)
{
char *p = malloc (strlen (s) + 1); // allocate memory
if (p != NULL)
strcpy (p,s); // copy string
return p; // return the memory
}
所以,它所做的是给我们另一个与它的参数所给出的字符串相同的字符串,而不需要我们分配内存。但我们仍然需要稍后释放它。
声明:
strcpy(ptr2, ptr1);
等价于(除了会改变指针):
while(*ptr2++ = *ptr1++);
而:
ptr2 = strdup(ptr1);
等价于:
ptr2 = malloc(strlen(ptr1) + 1);
if (ptr2 != NULL) strcpy(ptr2, ptr1);
所以,如果你想让你复制的字符串被用在另一个函数中(因为它是在堆部分创建的),你可以使用strdup,否则strcpy就足够了,
strdup()函数是字符串重复的简写,它接受一个参数作为字符串常量或字符串字面量,并为字符串分配足够的空间,并在分配的空间中写入相应的字符,最后将分配的空间的地址返回给调用例程。