#include <stdio.h>
#include <stdlib.h>
int constChars(const char* str) {
int size = sizeof(str)/sizeof(char);
printf("Size is %d.\n", size);
int i = 0;
for (i=0;i<size;i++)
printf("%c ", str[i]);
return 0;
}
int main(void) {
char a[10]={'b','c','d','e','f','f','f','f','f','f'};
constChars(a);
return 0;
}
我写了一些像上面这样的代码,但输出的结果是: 大小是8。 b c d e f f f f
我很困惑,为什么sizeof()函数的大小为8? 我使用gcc和freebsd。
答案 0 :(得分:4)
将数组传递给函数时,它会被重写为指针,其中sizeof
信息丢失。如果你在main
中这样做,那就是:
char a[10]={'b','c','d','e','f','f','f','f','f','f'};
int size = sizeof(a)/sizeof(a[0]);
printf("Size is %d.\n", size);
按预期打印10
。但是一旦你将它传递给constChars
,就会打印一个指针的大小。
答案 1 :(得分:0)
Str是指向char的指针。这通常是4到8个字节。您没有得到数组的大小,而是变量的大小。知道数组长度的唯一方法是用它传递大小,或者你可以用某种信号值(比如\ 0)来消除数组并进行一些迭代。