strcpy 和memcpy有什么不同

本文详细解释了strcpy与memcpy两个函数的区别与应用场景。strcpy仅用于字符串拷贝,并自动添加终止符;而memcpy则适用于任意类型的数据拷贝,需手动指定拷贝长度。此外,还提供了一个使用memcpy实现字符串循环右移的例子。
摘要由CSDN通过智能技术生成

strcpy 和memcpy有什么不同

strcpy()函数只能拷贝字符串。strcpy()函数将源字符串的每个字节拷贝到目的字符串中。当遇到字符串末尾的NULL字符('\0')时,它会结束拷贝,并在目的字符串后面自动加上'\0'
memcpy()函数可以拷贝任意类型的数据。因为并不是所有的数据都已NULL字符结束,所以要为memcpy()函数指定要拷贝的字节数。
自拷贝字符串时,通常使用strcpy()函数,在拷贝其他数据(如结构)时,通常使用memcpy()函数。
void *memcpy(char *dest,const char *src,size_t size)
{
assert((dest != NULL) &&(src != NULL));
char *p = dest;
char *q = src;
while(size-- > 0)
*p++ = *q++;
return dest;
}
//字符串右移n位函数
 
//写一个函数作用是把一个char组成的字符串循环右移n个,比如原来的是"abcdefghi"
//如果n=2 移位后应该是 "hiabcdefg"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_LEN 20
/*void LoopMove(char *src,int n)
{
 int m=strlen(src)-n;
 char temp[MAX_LEN];
 strcpy(temp,src+m)//把后n个字符先拷贝出来先 拷贝溢出的
 strcpy(temp+n,src);//把整个字符串都拷贝过去
// *(temp+strlen(src))='\0';//加结束字符
 strcpy(src,temp);
}
 */
void  LoopMove(char *src,int n)
{
 int m=strlen(src)-n;
 char temp[MAX_LEN];
 memcpy(temp,src+m,n);//把字符串的后n个字符先考拷贝到temp数组里面
 memcpy(src+n,src,m);//在源字符串的基础上,给那n个字符留好空位,然后把前m个字符拷贝到合适的位置上  //src原来就有结束字符所以不必再加
 memcpy(src,temp,n);//把后n个字符也拷贝到合适的位置上
}
int main()
{
 char str[]="abcdefghi";
 LoopMove(str,2);
 printf("%s\n",str);
 return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值