当前位置: 技术问答>linux和unix
一道笔试题:linux下找bug
来源: 互联网 发布时间:2016-07-06
本文导语: 对linux不熟悉55555~~~,在windows下正确的,哪位大大能跳出来说一下,感激不尽 #include char *reverse(char* str) { int len=0, i=0; char *pstr=str, *ptemp,*pd; while(*++pstr) len++; pstr--; //ptemp=(char*)malloc(len+1); ptemp=(char*)malloc(len+1)...
对linux不熟悉55555~~~,在windows下正确的,哪位大大能跳出来说一下,感激不尽
#include
char *reverse(char* str)
{
int len=0, i=0;
char *pstr=str, *ptemp,*pd;
while(*++pstr)
len++;
pstr--;
//ptemp=(char*)malloc(len+1);
ptemp=(char*)malloc(len+1);
pd=ptemp;
while(len--){
*ptemp=*pstr;
ptemp++;
pstr--;
i++;
}
*ptemp=*pstr;
ptemp++;
*ptemp='';
return pd;
}
int main()
{
char string[13]= "hello world!";
char *pstr=string;
printf("%s", pstr);
printf("%s", reverse(pstr));
return 0;
}
#include
char *reverse(char* str)
{
int len=0, i=0;
char *pstr=str, *ptemp,*pd;
while(*++pstr)
len++;
pstr--;
//ptemp=(char*)malloc(len+1);
ptemp=(char*)malloc(len+1);
pd=ptemp;
while(len--){
*ptemp=*pstr;
ptemp++;
pstr--;
i++;
}
*ptemp=*pstr;
ptemp++;
*ptemp='';
return pd;
}
int main()
{
char string[13]= "hello world!";
char *pstr=string;
printf("%s", pstr);
printf("%s", reverse(pstr));
return 0;
}
|
while(*++pstr)
len++;
这样的算法总会少算1个的。
假想pstr的长度是1,比如是"a"这个字符串,那么*++pstr就是0,len也就是0了。
不管linux还是windows,代码都不是正确的。
由于malloc的空间少了一个字节,就出现了越界,结果就有偶然性了。windows里面可能碰巧结果对了。
我在cygwin里面运行的结果也是正确的。
len++;
这样的算法总会少算1个的。
假想pstr的长度是1,比如是"a"这个字符串,那么*++pstr就是0,len也就是0了。
不管linux还是windows,代码都不是正确的。
由于malloc的空间少了一个字节,就出现了越界,结果就有偶然性了。windows里面可能碰巧结果对了。
我在cygwin里面运行的结果也是正确的。