strlen 測量的是字符的實際長度,以’\0’ 結束。而sizeof 測量的是字符的分配大小。
char *p = "123456789";
//sizeof此時計算的是指針的大小,所以輸出爲4
sizeof(p)
//strlen此時計算的是字符串的長度,不加\0,此時爲9
strlen(p)
char p[] = "123456789";
//sizeof此時計算的是字符的分配長度,包括結束符\0,所以輸出爲10
sizeof(p)
//strlen此時計算的是字符串的長度,不加\0,此時爲9
strlen(p)
char p[] = {'1','2','3','4','5','6','7','8','9',0};
//sizeof此時計算的是字符的分配長度,包括結束符\0,所以輸出爲10
sizeof(p)
//strlen此時後面0是結束符,此時爲9
strlen(p)
char p[] = {'1','2','3','4','5','6','7','8','9'};
//sizeof此時計算的是字符的分配長度,沒有輸入結束符,所以輸出爲9
sizeof(p)
//strlen此時計算的是字符串的長度,但後面沒有初始化也沒增加結束符,所以得到錯誤的結果35
strlen(p)
int s[] = {1,2,3,4,5};
//此時爲int型的數組,我們可以用sieof求取分配空間的大小爲5 * sizeof(int) = 20
sizeof(s)
//此時,我們無法用strlen得到數組的元素個數,可以採用
sizeof(s)/sizeof(s[0])進行計算