请教各位大侠,一个递归调用的字符串逆序问题,在X86下和ARM下运行结果不同的问题
这是我的程序,其实就是一个使用递归调用来实现字符串逆序的程序。
程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * myreverse(char * name,unsigned left,unsigned right)
{
if(left >= right)
{
printf("name:%s\n",name);
printf("address of name: %x\n",name);
return name;
}
char tmp;
tmp = name[left];
name[left++] = name[right];
name[right--] = tmp;
myreverse(name,left,right);
}
int main(int argc,char **argv)
{
char name[100]="";
char * p = NULL;
strcpy(name,argv[1]);
printf("main: address of name %x\n",name);
p = myreverse(name,0,strlen(name)-1);
printf("p: %x\n",p);
printf("result:%s\n",p);
return 0;
}
这是我在X86下编译和运行的结果
cc recure.c -o recure
./recure william
main: address of name bf9eeb44
name:mailliw
address of name: bf9eeb44
p: bf9eeb44
result:mailliw
结果是正确的。
但是我在开发板上运行的结果却总是不正确:
这是我在arm开发板上编译和运行的结果:
arm-hismall-linux-gcc recure.c -o recure
\cp recure /tmp/nfs/
./recure william
main: address of name beb55d60
name:mailliw
address of name: beb55d60
p: 4005c668
result:板
我试过很多方法:但是仍然没有定位到问题出在哪里?
请教各位高手能给我指点迷津,不胜感激!
[解决办法]
char * myreverse(char * name,unsigned left,unsigned right){ if(left >= right) { printf("name:%s\n",name); printf("address of name: %x\n",name);return name; } char tmp; tmp = name[left]; name[left++] = name[right]; name[right--] = tmp; myreverse(name,left,right);}