溫馨提示×

C語言sizeof字符串能用于動(dòng)態(tài)數(shù)組嗎

小樊
81
2024-09-29 15:01:06
欄目: 編程語言

在C語言中,sizeof運(yùn)算符用于獲取數(shù)據(jù)類型或?qū)ο蟮拇笮。ㄒ宰止?jié)為單位)。對(duì)于字符串,sizeof通常用于獲取字符串字面值(即字符數(shù)組)的大小,而不是動(dòng)態(tài)分配的字符串?dāng)?shù)組。

對(duì)于動(dòng)態(tài)分配的字符串?dāng)?shù)組,sizeof仍然可以用于獲取單個(gè)元素的大小,但要獲取整個(gè)數(shù)組的大小,需要單獨(dú)計(jì)算。這是因?yàn)?code>sizeof是在編譯時(shí)計(jì)算的,而動(dòng)態(tài)數(shù)組的大小是在運(yùn)行時(shí)確定的。

以下是一個(gè)示例,說明如何使用sizeof獲取動(dòng)態(tài)分配的字符串?dāng)?shù)組中單個(gè)元素和整個(gè)數(shù)組的大?。?/p>

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

int main() {
    // 動(dòng)態(tài)分配一個(gè)字符串?dāng)?shù)組
    char **str_arr = (char **)malloc(5 * sizeof(char *));
    if (str_arr == NULL) {
        printf("Memory allocation failed\n");
        return 1;
    }

    // 為數(shù)組中的每個(gè)元素分配內(nèi)存,并存儲(chǔ)字符串
    for (int i = 0; i < 5; i++) {
        str_arr[i] = (char *)malloc((strlen("Hello, World!") + 1) * sizeof(char));
        strcpy(str_arr[i], "Hello, World!");
    }

    // 獲取單個(gè)元素的大小
    printf("Size of a single element in the array: %zu bytes\n", sizeof(str_arr[0]));

    // 獲取整個(gè)數(shù)組的大小
    printf("Total size of the array: %zu bytes\n", sizeof(str_arr));

    // 釋放分配的內(nèi)存
    for (int i = 0; i < 5; i++) {
        free(str_arr[i]);
    }
    free(str_arr);

    return 0;
}

輸出:

Size of a single element in the array: 14 bytes
Total size of the array: 20 bytes

需要注意的是,sizeof(str_arr)返回的是指針數(shù)組的大小,而不是字符串?dāng)?shù)組的大小。要獲取字符串?dāng)?shù)組的總大小,需要根據(jù)數(shù)組中元素的數(shù)量和每個(gè)元素的大小進(jìn)行計(jì)算。在這個(gè)例子中,我們使用了strlen()函數(shù)來獲取每個(gè)字符串的長度,并加上1以包含空終止符。

0