strcpy, strncpy, memcpy 三个函数区别和用法

一 strcpy函数

  • 函数原型: char * strcpy(char *dst, char *src);
  • 函数概念: strcpy是一种C语言的标准库函数,strcpy把从src地址开始且含有’\0’结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。如果dst指针原来有数据,调用strcpy函数后,会覆盖dst指针中的数据, 而且要保证dst指针的所分配的内存大于等于src的内存,否则会越界。
#include<stdio.h>
#include<string.h>
int main(void)
{
    char dst[] = "wwwwww";
    char str[] = "aaaaaa";
    strcpy(dst, str);
    printf("%s\n", dst);
    return 0;
}
//结果为 aaaaaa

二 strncpy函数

  • 函数原型: char *strncpy(char *dst, char *src, int n);
  • 函数概念: strncpy 是C语言的库函数之一,来自C语言标准库,作用是将src所指向的字符串中以src地址开始的前n个字节复制到dst所指的地址中,并返回dst。
  • strncp函数相较于strcpy函数的优点就是strncpy函数可以选择复制多大的字符串。
    – 1 可以有效的避免第一个指针分配的内存大小太小
    – 2 可以只选择需要的数据进行复制
#include<stdio.h>
#include<string.h>
int main(void)
{
    char dst[10] = "aaaaaaa";
    char src[20] = "bbbbbbbbbbbbbbb";
    strncpy(dst, src, sizeof(dst) - 1);
    printf("%s\n", dst);
    return 0;
}
//输出结果为: bbbbbbbbb

三 memcpy函数

  • 函数原型: void *memcpy(void *dst, void *src, size_t n);
  • 函数区别: 函数原型中dst与src指针都是void类型,就说明这个函数可以复制任何类型的数据,不仅仅是字符串,所以功能比strncpy函数还要强大。
  • 函数概念: 将src指针所指向的地址为起点,连续将n个字节的数据复制到dst指针所指向的内存中。
#include<stdio.h>
#include<string.h>
int main(void)
{
    int i;
    int num[5];
    int num1[7] = {1, 2, 3 ,4 ,5 ,6 ,7};
    memcpy(num, num1, sizeof(num));//将num1指针所指向地址为起点连续20个字节复制到num中。
    for(i = 0; i < 5; i++) 
        printf("%d\t", num[i]);
    printf("\n");
    return 0;
    //输出结果 1 2 3 4 5
}

猜你喜欢

转载自blog.csdn.net/weixin_42250655/article/details/81273017