方法1:(普通版)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void rever(char* src,char* out_put)
{
int i = 0;
char *res = src;
int len = strlen(res);
while(*res != '\0')
{
out_put[len - i - 1] = *res;
res++;
i++;
}
out_put[len] = '\0';
}
int main(int argc,char** argv)
{
char *res = (char*)malloc(1024);
memset(res,0,1024);
rever(argv[1],res);
printf("%s\n",res);
free(res);
}
方法2:(优化版)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* rever(const char* src)
{
char* tmp = (char*)malloc(strlen(src) + 1);
strcpy(tmp,src);
/*
* ret 用于返回结果
* */
char* ret = tmp;
/*
* 初始的时候就让指针p指向传入的字符串的最后一个字符
* 即'\0'前面的一个字符
* */
char* p = tmp + strlen(src) - 1;
/*
* 因为指针p所指向的地址比tmp更大,所以可以这样比较
* */
while(p > tmp)
{
/*
* 交换p和tmp所指向的字符
* */
*p ^= *tmp;
*tmp ^= *p;
*p ^= *tmp;
/*
* 移动指针
* */
--p;
++tmp;
}
/*
* 最后返回翻转后的结果
* */
return ret;
}
int main(int argc,char** argv)
{
char* res = rever(argv[1]);
printf("res = %s\n",res);
}