我了解到strcpy用于复制字符串,而strdup返回一个指向新字符串的指针来复制该字符串。
您能解释一下在哪些情况下更喜欢使用strcpy吗?在哪些情况下您更喜欢使用strdup吗
发布于 2012-12-24 19:51:50
strcpy(ptr2, ptr1)等同于while(*ptr2++ = *ptr1++)
其中,as strdup等同于
ptr2 = malloc(strlen(ptr1)+1);
strcpy(ptr2,ptr1);(memcpy version可能更有效率)
因此,如果您希望将复制的字符串用于另一个函数(因为它是在heap部分中创建的),则可以使用strdup,否则strcpy就足够了。
发布于 2012-12-24 20:36:40
函数strcpy和strncpy是C标准库的一部分,在现有内存上运行。也就是说,您必须提供函数将字符串数据复制到的内存,并且作为推论,您必须有自己的方法来确定需要多少内存。
相比之下,strdup是一个Posix函数,它为您执行动态内存分配。它返回一个指向新分配的内存的指针,并将字符串复制到该内存中。但是你现在要对这个内存负责,并且最终必须free它。
这使得strdup成为“隐藏的malloc”方便函数之一,这可能也是为什么它不是标准库的一部分。只要您使用标准库,您就知道必须为每个malloc/calloc调用一个free。但是像strdup这样的函数引入了一个隐藏的malloc,出于内存管理的目的,您必须将其视为malloc。(另一个这样的隐藏分配函数是GCC的abi::__cxa_demangle()。)当心!
发布于 2012-12-24 18:57:58
strdup为堆上的新字符串分配内存,而使用strcpy (或其更安全的strncpy变体)我可以将字符串复制到上预先分配的内存中(堆或堆栈)。
https://stackoverflow.com/questions/14020380
复制相似问题