字符串比较函数实现,超简单的面试题,回过头来发现原来我的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 @   Dont  阅读(493)  评论(3编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示