char a[255];
void test(char* a){
printf("%d %d %d \n",sizeof(a),sizeof(*a),sizeof(&a));
}
所有这些都没有得到变量'a'的实际大小;
答案 0 :(得分:3)
你做不到。您必须将大小作为附加参数传递。可能属于unsigned int
类型,因为大小不可能是负数。
void test(char* a, unsigned int size)
{
// ...
}
尽管结果相同,但将第二个参数设为size_t会更好,因为这是惯例。
void test(char* a, size_t size)
{
// ...
}
答案 1 :(得分:3)
你应该明确地将它与指向第一个元素的指针一起传递。
char a[255];
void test(char* a, size_t num_elem){
/* do smth */
}
int main() {
test(a, sizeof a / sizeof a[0]);
return 0;
}
并且sizeof a / sizeof a[0]
在数组中提供了许多元素,请注意,这个技巧无法使用指针正常工作,但只能使用数组。
答案 2 :(得分:0)
你做不到。 a
类型为char*
,并且与其没有关联的大小。这就是为什么输出到缓冲区的大多数标准库方法都有一个额外的参数来指定缓冲区大小(参见strncpy)。