sizeof
sizeof()不是一个函数,用来判断一个字符串或者表达式的长度等等。它的计算包括终止null字节的缓冲区长度。
strlen()
strlen的不包含终止null字节的字符串长度。
下面我们来尝试去实现自己的strlen()函数:
int strlen( const char * s ) { char * prt = s; int len = 0; while( *prt++ ) i++; return i; }
下面我们用一个简单的例子去验证一下:
#include <stdio.h> int strlen( const char * ); int main( void ) { char * s = "hello"; printf("strlen(s) = %d\n", strlen(s)); return 0; } int strlen( const char * s ) { char * ptr = s; int len = 0; while( *ptr++ ) i++; return i; }
$ gcc -o strlen strlen.c
$ ./strlen
strlen(s) = 5
注意:上面实现的strlen函数没有考虑到NULL等问题,当在写程序的时候,应该具体考虑到边界问题等等,提高代码的质量。
差别:
使用strlen是一次函数的调用,然而对于sizeof而言,并非是一次函数调用,因为缓冲区去用已知字符串进行初始化,其长度是固定不变的了,所以sizeof在程序编译的时候就计算出了缓冲区的长度。