首先,strlen是函數,sizeof是運算操作符,二者得到的結果類型為size_t,即unsigned int類型。大部分編譯程序在編譯的時候就把sizeof計算過了,而strlen的結果要在運行的時候才能計算出來。
對於以下語句:
char *str1 = "asdfgh";
char str2[] = "asdfgh";
char str3[8] = {'a', 's', 'd'};
char str4[] = "as\0df";
執行結果是:
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;
總結一句就是sizeof計算的是變量的大小,而strlen計算的是字符串的長度,前者不受字符'\0'影響,后者以'\0'作為長度判定依據。
原文:https://blog.csdn.net/shudaxia123/article/details/47753505