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

作者分享了一次C语言面试的经历,面对基础题目的挑战,深入探讨了字符串比较函数的实现及其潜在问题,强调了严谨性和代码调试的重要性。通过案例分析,作者反思了自己的C语言基础,表达了对自身水平提升的期待。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

#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++了

转载于:https://www.cnblogs.com/dont27/archive/2011/10/12/2208037.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值