函数和功能描述:
extern char *strdup(char *s);
- 头文件:string.h
- 功能:将串拷贝到新建的位置处
- 说 明:strdup() 不是标准的 C 函数。strdup() 在内部调用了 malloc() 为变量分配内存,不需要使用返回的字符串时,需要用 free() 释放相应的内存空间,否则会造成内存泄漏。
- 返回值:返回一个指针,指向为复制字符串分配的空间,如果分配空间失败,则返回 NULL 值。
// strdup.c
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char **argv) { char *s = "studying c language"; char *d; d = strdup(s); printf("%s", d); free(d); return 0; }
char *strcpy(char *dest, const char *src);
- 头文件:#include <string.h> 和 #include <stdio.h>
- 功能:把从 src 地址开始且含有 NULL 结束符的字符串复制到以 dest 开始的地址空间
- 说明:strcpy() 是标准的 C 语言标准库函数。src 和 dest 所指内存区域不可以重叠且 dest 必须有足够的空间来容纳 src 的字符串。
- 返回值:返回指向 dest 的指针。
// strcpy.c
#include <stdio.h> #include <string.h> int main(int argc, char **argv) { char *s = "studying c language"; char d[20]; strcpy(d, s); printf("%s\n", d); return 0; }
总结:
1、strdup() 不是标准的c函数,strcpy() 是标准的 C 函数,使用时注意场合;
2、strdup() 可以直接把要复制的内容复制给没有初始化的指针,因为它会自动分配空间给目的指针,strcpy()的目的指针一定是已经分配内存的指针;
3、strdup() 用完要 free() 函数释放内存,否则内存泄露;
4、使用 strcpy() 必须事先确定 src 大小,可以先 strlen 判断 src 的大小,之后为 dest 申请空间,之后再 strcpy() 就不会有问题了;