strcpy(),strncpy(),memcpy(),memccpy(),remmove()

一:strcpy()和memcpy()和memccpy()

1.strcpy()

函数原型:char *strcpy(char* dest, const char *src);
函数说明:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回:指向dest的指针。
变形:char *strcpy(char *(dest + n1), const char *(src + n2));
把从src地址+n2到’\0’的字符串复制到以dest地址+n1开始的空间
该函数遇见’\0’自动停止复制
例:

#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main() {
    //freopen("i.txt","r", stdin);
    char str1[] = "abcde";
    char str2[] = "12345";
    strcpy(3+str2, 2+str1);
    puts(str2);
    return 0;
}

output:
cde
123cde

2.strncpy()

函数原型:char *strncpy(char *dest,char *src,int size_t);
函数说明:复制字符串src中的内容(字符,数字、汉字…)到字符串dest中,复制多少由size_t n的值决定。如果src的前n个字符不含’\0’,则结果不会以’\0’结束。
返回:复制的内容。
char *strncpy(char *(dest + n1), const char *(src + n2),n);
该函数也可改变字符数组起始位置,与上相同。
使用该方法要注意有些情况应该手动添加’\0’,防止输入出现乱码。

3.memcpy()

函数原型:void *memcpy(void *dest, const void *src, size_t*n);
函数说明: memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束’\0’而结束(不限制为字符串,数组等等都可以)。
该函数对于字符串也需要手动添加’\0’。
返回值: 返回指向dest的指针。

#include <stdio.h>
#include <malloc.h>
#include <string.h>
int main() {
    //freopen("i.txt","r", stdin);
    int arr1[5] = {1,2,3,4,5};
    int arr2[5];
    int *arr3 = memcpy(arr2, arr1, 5*sizeof(int));
    for(int i = 0; i < 5; i++)
        printf("%d ",arr2[i]);
    printf("\n");
    for(int i = 0; i < 5; i++)
        printf("%d ",arr3[i]);
    return 0;
}
output:
1 2 3 4 5
1 2 3 4 5

4.memccpy()

函数原型::void *memccpy(void *dest, const void *src, int c, size_t*n);
函数说明: memccpy()用来拷贝src所指的内存内容前n个字节到dest所指的地址上。与memcpy()不同的是,memccpy()如果在src中遇到某个特定值(int c)立即停止复制
返回值: 返回指向dest中值为c的下一个字节指针。返回值为0表示在src所指内存前n个字节中没有值为c的字节**。

5.memmove()

函数原型:extern void *memmove(void *dest, const void *src, size_t n);
函数说明:由src所指内存区域复制count个字节到dest所指内存区域。src和dest所指内存区域可以重叠,但复制后dest内容会被更改。
如果发生了重叠,使用 memmove() 会更加安全.
返回值: 返回指向dest指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值