C语言sizeof字符串能用于动态数组吗

avatar
作者
猴君
阅读量:0

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

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!