strlen是函數,而sizeof是算符。strlen需要進行一次函數調用,而對於sizeof而言,因為緩沖區已經用已知字符串進行了初始化,起長度是固定的,所以sizeof在編譯時計算緩沖區的長度。
因為sizeof()測試的是數組的長度。而strlen測試的是字符串的長度。在定義數組時,字符串後面還有一個結束標志'\0',這個也要算進去!
#include <stdio.h> #include <string.h> main() { char ss[]="string"; printf("%d %d \n",sizeof(ss),strlen(ss)); }
代碼修改下:
#include <stdio.h> #include <string.h> main() { char ss[]="string"; ss[0]=0; ss[1]='\0'; ss[2]='0'; printf("%d %d \n",sizeof(ss),strlen(ss)); }
聲明x的時候x裡面存儲的是"string\0",最後的\0是結束符,所以sizeof(x)就是7。 而\0的asccii碼值為0,strlen(x)是計算到\0位置,strlen(x)也就是0了。