strlen 和 sizeof 取字符串長度的區別


首先,strlen是函數,sizeof是運算操作符,二者得到的結果類型為size_t,即unsigned int類型。大部分編譯程序在編譯的時候就把sizeof計算過了,而strlen的結果要在運行的時候才能計算出來。

 

sizeof計算的是變量的大小,而strlen計算的是字符串的長度,前者不受字符’\0’影響,后者以’\0’作為長度判定依據。

對於以下語句:

int main()
{
    char *str1 = "asdfgh";
    char str2[] = "asdfgh";
    char str3[8] = {'a', 's', 'd'};
    char str4[] = "as\0df";

    printf("sizeof(str1)=%d\n",sizeof(str1));
    printf("strlen(str1)=%d\n",strlen(str1));

    printf("sizeof(str2)=%d\n",sizeof(str2));
    printf("strlen(str2)=%d\n",strlen(str2));

    printf("sizeof(str3)=%d\n",sizeof(str3));
    printf("strlen(str3)=%d\n",strlen(str3));

    printf("sizeof(str4)=%d\n",sizeof(str4));
    printf("strlen(str4)=%d\n",strlen(str4));

    return 0;
}

 

執行結果是:

sizeof(str1) = 4;  strlen(str1) = 6;
sizeof(str2) = 7;  strlen(str2) = 6;
sizeof(str3) = 8;  strlen(str3) = 3;
sizeof(str4) = 6;  strlen(str4) = 2;

 

str1是字符指針變量,sizeof獲得的是該指針所占的地址空間,32位操作系統對應4字節,所以結果是4;strlen返回的是該字符串的長度,遇到’\0’結束,’\0’本身不計算在內,故結果是6。

str2是字符數組,大小由字符串常量”asdfgh”確定,sizeof獲得該數組所占內存空間大小,包括字符串結尾的’\0’,所以結果為7;strlen同理返回6。

str3也是字符數組,但大小確定為8,故sizeof得到的結果是8;strlen統計’\0’之前所有字符的個數,即為3;

str4是常量字符數組,sizeof得到字符總數即6;strlen計算至’\0’結束,因此返回2;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM