sizeof 和 strlen 的區別及舉例

sizeof 和 strlen 的區別

1)sizeof 操作符的結果類型是 size_t,它在頭文件中 typedef 爲 unsigned int類型。該類型保證能容納實現所建立的最大對象的字節大小。

2)sizeof 是個操作符,strlen 是庫函數。

3)sizeof 的參數可以是數據的類型,也可以是變量,而 strlen 只能是以結尾爲 ’\0’ 的字符串作參數。

4)編譯器在編譯時就計算出了 sizeof 的結果,而 strlen 函數必須在運行時才能計算出來。並且 sizeof 計算的是數據類型內存的大小,而 strlen 計算的是字符串實際的長度。

5)數組做sizeof的參數不退化,傳遞給 strlen 就退化爲指針。

6)當適用了於一個結構類型時或變量, sizeof 返回實際的大小, 當適用一靜態地空間數組, sizeof 歸還全部數組的尺寸。 sizeof 操作符不能返回動態地被分派了的數組或外部的數組的尺寸。

實例

#include <stdio.h>
#include <string.h>
 
void func(char str_arg[100])
{
    printf("\nstr_arg = %s\n", str_arg);
    printf("sizeof(str_arg) = %d\n", sizeof(str_arg));
    printf("strlen(str_arg) = %d\n", strlen(str_arg));
}

int main()
{
    char str[] = "Hello";
    printf("str = %s\n", str);
    printf("sizeof(str) = %d\n", sizeof(str));
    printf("strlen(str) = %d\n", strlen(str));
 
    char * p = str;
    printf("\np = %s\n", p);
    printf("sizeof(p) = %d\n", sizeof(p));//linux 64位系統下,指針的長度是8字節,但是windows 64位系統下,指針的長度是4字節
    printf("strlen(p) = %d\n", strlen(p));
 
    func(str);
    return 0;
}
str = Hello
sizeof(str) = 6
strlen(str) = 5

p = Hello
sizeof(p) = 4
strlen(p) = 5

str_arg = Hello
sizeof(str_arg) = 4
strlen(str_arg) = 5
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章