c字符串拷贝操作

#include <string.h>

char *strcpy(char *dest,char *src);
char *strdup(const char *s);
char *strndup(const char *s, size_t n);
void *memcpy(void *dest, const void *src, int n)
void *memmove( void* dest, const void* src, size_tcount )

strcpy 把src所指由NULL结束的字符串复制到dest所指的数组中,src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串,返回指向dest的指针。
strdup()主要是拷贝字符串s的一个副本,由函数返回值返回,这个副本有自己的内存空间,和s不相干。
strndup()就是,拷贝的时候,最多拷贝n个字符,如果s的长度大于n,后面的就略去。
memcpy 从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中,与strcpy相比,memcpy并不是遇到'\0'就结束,而是一定会拷贝完n个字节,如果目标数组destin本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址增加到你要追加数据的地址;注意,source和destin都不一定是数组,任意的可读写的空间均可。
memmove由src所指内存区域复制count个字节到dest所指内存区域,src和dest所指内存区域可以重叠,但复制后dest内容会被更改。函数返回指向dest的指针。

code for example:
//str copy
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define BUFFER_SIZE 128
int main(){
char s1[]="Linux C Programming";
char s2[]={'a','b','c','\0'};//must add \0
char s[]={'a','b','c'};
char d1[BUFFER_SIZE];
char d2[BUFFER_SIZE];
//功能:把src所指由NULL结束的字符串复制到dest所指的数组中
strcpy(d1,s1);
strcpy(d2,s2);
printf("%s\n",d1);
printf("%s\n",d2);
//返回指向被复制的字符串的指针,所需空间由malloc()分配且可以由free()释放
char *dup=strdup(s2);
printf("%s\n",dup);
free(dup);
//而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等,根据其第3个参数决定复制的长度
char men[BUFFER_SIZE];
memcpy(men,s,3);
men[strlen(s)]='\0';
printf("%s\n",men);
//void *memmove( void* dest, const void* src, size_t count),由src所指内存区域复制count个字节到dest所指内存区域,src和dest所指内存区域可以重叠,但复制后dest内容会被更改。函数返回指向dest的指针
memmove(s1,s1+6,(strlen(s1)-6));
s1[strlen(s1)-6]='\0';
printf("%s\n",s1);
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值