如何知道传递给函数的 char 数组的大小(以字节为单位)?
How to know the size (in bytes) of a char array passed to a function?
我正在测试 sizeof 运算符。
在我的代码中的两种情况下,我得到了指针的 大小 (我认为)。
在其他情况下,我得到数组占用了多少字节。
当我将数组传递给函数时,如何获得以字节为单位的数组大小?
sizeof 运算符还不够吗?
我做错了什么吗?
#include <stdio.h>
/*Testing the operator sizeof*/
void test (char arrayT[]);
void test2 (char *arrayU);
int main(int argc, char *argv[]){
char array1[7];
printf("array1 size is:%d\n", sizeof array1);
/*array1 size is: 7*/
char array2[] = { '1', '2', '3', '4', '5', '6', '7'};
printf("array2 size is:%d\n", sizeof array2);
/*array2 size is: 7*/
char array3[] = "123456";
printf("array3 size is:%d\n", sizeof array3);
/*array3 size is: 7*/
unsigned char array4[] = "123456";
printf("array4 size is:%d\n", sizeof array4);
/*array4 size is: 7*/
char arrayX[] = "123456";
test(arrayX);
/*arrayT size is: 4*/
char arrayY[] = "123456";
test2(&arrayY[0]);
/*arrayU size is: 4*/
return 0;
}
void test (char arrayT[]){
printf("arrayT size is:%d\n", sizeof arrayT);
}
void test2 (char *arrayU){
printf("arrayU size is:%d\n", sizeof arrayU);
}
将数组传递给函数时,实际发生的是传递指向数组中第一个元素的指针。换句话说,数组衰减为指向第一个元素的指针。
在这两个声明中:
void test (char arrayT[]);
void test2 (char *arrayU);
由于这种衰减,arrayT
和 arrayU
是完全相同的类型,并且 sizeof
将 return 两者具有相同的值,即 a 的大小char *
.
对比上面这个:
char array1[] = "a string";
char *array2;
其中 array1
实际上是一个大小为 9 的数组,而 array2
是一个指针,其大小(在您的系统上)为 4。
因此,无法知道传递给函数的数组的长度。您需要将尺寸作为单独的参数传入:
void test (char arrayT[], size_t len);
我正在测试 sizeof 运算符。 在我的代码中的两种情况下,我得到了指针的 大小 (我认为)。 在其他情况下,我得到数组占用了多少字节。 当我将数组传递给函数时,如何获得以字节为单位的数组大小? sizeof 运算符还不够吗? 我做错了什么吗?
#include <stdio.h>
/*Testing the operator sizeof*/
void test (char arrayT[]);
void test2 (char *arrayU);
int main(int argc, char *argv[]){
char array1[7];
printf("array1 size is:%d\n", sizeof array1);
/*array1 size is: 7*/
char array2[] = { '1', '2', '3', '4', '5', '6', '7'};
printf("array2 size is:%d\n", sizeof array2);
/*array2 size is: 7*/
char array3[] = "123456";
printf("array3 size is:%d\n", sizeof array3);
/*array3 size is: 7*/
unsigned char array4[] = "123456";
printf("array4 size is:%d\n", sizeof array4);
/*array4 size is: 7*/
char arrayX[] = "123456";
test(arrayX);
/*arrayT size is: 4*/
char arrayY[] = "123456";
test2(&arrayY[0]);
/*arrayU size is: 4*/
return 0;
}
void test (char arrayT[]){
printf("arrayT size is:%d\n", sizeof arrayT);
}
void test2 (char *arrayU){
printf("arrayU size is:%d\n", sizeof arrayU);
}
将数组传递给函数时,实际发生的是传递指向数组中第一个元素的指针。换句话说,数组衰减为指向第一个元素的指针。
在这两个声明中:
void test (char arrayT[]);
void test2 (char *arrayU);
由于这种衰减,arrayT
和 arrayU
是完全相同的类型,并且 sizeof
将 return 两者具有相同的值,即 a 的大小char *
.
对比上面这个:
char array1[] = "a string";
char *array2;
其中 array1
实际上是一个大小为 9 的数组,而 array2
是一个指针,其大小(在您的系统上)为 4。
因此,无法知道传递给函数的数组的长度。您需要将尺寸作为单独的参数传入:
void test (char arrayT[], size_t len);