在C語言中,sizeof
運算符用于獲取數據類型或對象的大小(以字節為單位)。對于字符串,sizeof
通常用于獲取字符串字面值(即字符數組)的大小,而不是動態分配的字符串數組。
對于動態分配的字符串數組,sizeof
仍然可以用于獲取單個元素的大小,但要獲取整個數組的大小,需要單獨計算。這是因為sizeof
是在編譯時計算的,而動態數組的大小是在運行時確定的。
以下是一個示例,說明如何使用sizeof
獲取動態分配的字符串數組中單個元素和整個數組的大小:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
// 動態分配一個字符串數組
char **str_arr = (char **)malloc(5 * sizeof(char *));
if (str_arr == NULL) {
printf("Memory allocation failed\n");
return 1;
}
// 為數組中的每個元素分配內存,并存儲字符串
for (int i = 0; i < 5; i++) {
str_arr[i] = (char *)malloc((strlen("Hello, World!") + 1) * sizeof(char));
strcpy(str_arr[i], "Hello, World!");
}
// 獲取單個元素的大小
printf("Size of a single element in the array: %zu bytes\n", sizeof(str_arr[0]));
// 獲取整個數組的大小
printf("Total size of the array: %zu bytes\n", sizeof(str_arr));
// 釋放分配的內存
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)
返回的是指針數組的大小,而不是字符串數組的大小。要獲取字符串數組的總大小,需要根據數組中元素的數量和每個元素的大小進行計算。在這個例子中,我們使用了strlen()
函數來獲取每個字符串的長度,并加上1以包含空終止符。