在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以包含空終止符。