字符串比较函数实现,超简单的面试题,回过头来发现原来我的c多么的薄弱

今天某个公司面试,尽管报了个测试类的,但是面试依旧不给力,先是写个字符串比较函数,只判断相等和不相等的情况,当时大概这么写的:

#include<stdio.h>

bool strCompare(char *str1,char *str2){
char *s1=str1,*s2=str2;
printf("%c and %c\n",*s1,*s2);
while(s1&&s2){
if(*s1!=*s2){
printf("%c and %c\n",*s1,*s2);//调试专用
printf("test\n");
return false;
}
s1++;
s2++;
}
if(!s1&&!s2)return true;
return false;
}

int main(){
char st1[]="baibai";
char st2[]="baibai";
char st3[]="daibai";
if(strCompare(st1,st2))printf("success\n");
else printf("fail\n%c\n",*st1);
if(strCompare(st1,st3))printf("fail\n");
else printf("success\n");
}

shit,回来测试一下,发现第一个用例错了,截图如下

然后一直觉得是不是cfree问题,后来去vs2008那边逐行调试了一下,才知道自己弱爆了:

bool strCompare(char *str1,char *str2){
char *s1=str1,*s2=str2;
printf("%c and %c\n",*s1,*s2);
while(*s1&&*s2){
if(*s1!=*s2){
printf("%c and %c\n",*s1,*s2);
printf("test\n");
return false;
}
s1++;
s2++;
}
if(!*s1&&!*s2)return true;
return false;
}

看到木有,丫的,居然是因为那个while判断出问题了,太久没用c还是说根本没把c当一回事。

那时思考:

要是是while(s1&&s2)的话,遍历到最后(字符串结尾)还会一直遍历。实际上就是遍历到真正没有地址的时候才停下来(不知道这么说对不对,求指正),这个时候s1跟s2存的数值是神马,就不得而知了。

唉,发现了错误之后,还是感觉挺爽的,但是为自己如此弱的水平,实在感慨……神马招聘都不敢报c++了
posted @ 2011-10-12 00:42  Dont  阅读(371)  评论(3编辑  收藏