题目描述:
实现逆序的Memcpy方法。 函数原型: void * reversememcpy ( void * destination, const void * source, int num ); 功能要求: 从source所指的内存地址的起始位置开始拷贝num个字节,按字节逆序保存到目标destination所指的内存地址的起始位置中。 返回值:为destination 注意: 1. 本函数实现的是按字节逆序拷贝。例如source指向位置,如果依次保存了'a','b','c','d',当num=4时,则逆序拷贝后destination指向的位置应该依次'd','c','b','a'. 2. 将源文件命名为functions.cpp。 3. 遇到异常情况,输出"error";否则不要随意输出,会视为错误。
参考代码:
#include<stdio.h>
#include<math.h>
void * reversememcpy(void * destination,const void * source, int num)
{
char *des=(char*)destination,*src=(char*)source;
if(des==NULL||src==NULL||num<0||abs((int)(src-des))<num)
{
printf("error");
return NULL;
}
for(int i=0;i<num;++i)
des[num-i-1]=src[i];
return (void*)des;
}
int main(){
char s[10001],d[10001];
int n;
scanf("%s %d",s,&n);
reversememcpy(d,s,n);
printf("%s\n",d);
return 0;
}
讲解:
此题的错误情况 真 的 难 想 到 !
然后还牵扯到了很多指针的操作,主要是一些强制转换。
求实求真,大气大为。