当我通过方法传递char数组并使用sizeof方法时,它与我直接使用sizeof的方式不同。有谁知道为什么以及如何解决这个简单的错误?
#include <stdlib.h>
int main()
{
char c[5];
char car[] = { 'a', 'b', 'c' };;
int num = my_strlen(c);
printf("%d \n", sizeof(c));
printf("%d \n", sizeof(car));
printf("%d \n", my_strlen(c));
printf("%d \n", my_strlen(car));
return 0;
}
int my_strlen(char s[]) // returns number of characters in a string
{
return sizeof(s);
}
输出:
5
3
8
8
答案 0 :(得分:1)
当用作参数时,数组会衰减到指针,这意味着
int my_strlen(char s[])
{
return sizeof(s);
}
而是
int my_strlen(char* s)
{
return sizeof(s);
}
所以sizeof(s) == sizeof(char*) == sizeof(void*)
显然是你机器上的8个字节,因为你在64架构上运行。