Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Khác biệt giữa strlen() và sizeof() cho chuỗi trong C

strlen()

Hàm strlen() trả về độ dài chuỗi (số ký tự trước \0), không kể null terminator. Khai báo trong <string.h>.

size_t strlen(const char *str);

Ví dụ

#include <stdio.h>
#include <string.h>

int main() {
    char s1[10] = "Hello";  // 5 ky tu + \0 + 4 byte con lai = 0
    int len = strlen(s1);
    printf("Do dai chuoi s1: %d\n", len);  // 5
    return 0;
}

Kết quả

Do dai chuoi s1: 5

sizeof()

Toán tử sizeof() trả về kích thước bộ nhớ (bytes) của kiểu hoặc biến. Với mảng, trả về tổng kích thước mảng (kể cả phần tử không dùng và null terminator).

sizeof(type_or_expression);

Ví dụ

#include <stdio.h>

int main() {
    int a = 16;
    printf("Kich thuoc bien a: %zu\n", sizeof(a));       // 4
    printf("Kich thuoc int: %zu\n", sizeof(int));         // 4
    printf("Kich thuoc char: %zu\n", sizeof(char));       // 1
    printf("Kich thuoc float: %zu\n", sizeof(float));     // 4
    printf("Kich thuoc double: %zu\n", sizeof(double));   // 8
    
    char s1[10] = "Hello";
    printf("sizeof(s1): %zu\n", sizeof(s1));  // 10 (kich thuoc mang)
    printf("strlen(s1): %zu\n", strlen(s1));  // 5 (do dai chuoi)
    return 0;
}

Kết quả

Kich thuoc bien a: 4
Kich thuoc int: 4
Kich thuoc char: 1
Kich thuoc float: 4
Kich thuoc double: 8
sizeof(s1): 10
strlen(s1): 5

Bảng so sánh

Đặc điểmstrlen()sizeof()
Đếm gìKý tự trước \0Bytes bộ nhớ
Kết quả cho char[10]="Hello"510
Thời điểmRuntimeCompile-time (mostly)
Con trỏHoạt động (đếm từ địa chỉ)Trả về kích thước con trỏ (4/8)
Header<string.h>Toán tửbuiltin

Quy tắc nhớ: strlen = string length (độ dài logic). sizeof = size of memory (kích thước vật lý).