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
//如果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);
}
{
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;
{
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;
}