函数和功能描述:
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() 就不会有问题了;