不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2019-10-06 23:30  分类:Linux_C  编辑

函数和功能描述:

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() 就不会有问题了;