strlen什么意思:统计字符串有效字符个数(不含结束符)

strlen什么意思:统计字符串有效字符个数(不含结束符)

初学C语言写作业的时候,盯着代码里陌生的strlen什么意思,盯着编译器弹窗卡了整整一下午,连着改了四五遍代码,程序输出的数据一直和题目要求对不上。

最开始想当然把它当成统计数组全部字符的函数,直接照搬网课写的用法,定义char数组存了一串用户名,直接套用strlen读取长度,赋值给整型变量后打印,出来的数字永远比手动数的字数少一位。

随便改数组大小,也改变不了这个差值,当时只觉得编译器出问题了,反复复制粘贴代码,删掉空格重写标点,折腾半个多小时,结果半点没变。

敲代码的时候没留意细节,习惯性给字符串末尾加了手动空格,还混用了得、地用法,以为空白字符会被strlen一并计入长度,这是第一个踩的错处。

后来才反应过来,C语言字符串自带隐藏的\0结束符,这是strlen判定停止计数的标记。

课堂同桌随手敲了两行对照代码,做了直白对比,定义无空格普通字符串、带手动空格字符串、手动添加\0截断字符串三组内容,同一编译器运行,能肉眼看清差异。正常文字会逐个数,碰到\0直接终止统计,不管后面还有多少字符,都不会读取。

之前一直混淆它和sizeof,这是耗时间最久的误区。sizeof是直接读取数组开辟的全部内存字节,提前定义多大空间,数值就固定多大,不受文字内容影响;strlen只从首个字符开始遍历,碰到结束符就停下,只算肉眼可见输入的文字、标点、空格。

实操过一次截断测试,彻底吃透差别。写了char a[]="abc123\0xyz";这行代码,sizeof测出数组总长是10,strlen跑出来只有6,后半段xyz完全不会被统计进去,这个现场结果比课本文字好懂太多。

很多新手写代码会犯同一个毛病,初始化字符串时忘记系统自带结束符,自己额外再加\0,不会报错,但会让strlen统计长度错乱,输出随机数字。我上周随堂练习就做过这事,多加结束符后,长度直接少了一大半,排查半天才找到多余符号。

不用深究底层源码逻辑,日常写C语言做题、简易开发,只用记住它的实操规则就行。

关掉编译器的时候,桌面记事本里还记着两行易错代码,光标停在\0这个符号后面。

了解更多百科知识请访问 百科