C中的malloc()行为

Dow*_*Dev -1 c malloc

对于下面的C代码,当我只输入一个字符时,我希望最后一个printf打印"10,10".而是打印"10,8".input当malloc 10个字节时,为什么只有8个字节?

char* input;
unsigned long inputLen = 10;

input = (char*) malloc(10 * sizeof(char));

printf("Input: ");
getline(&input,&inputLen,stdin);
printf("%lu,%d",inputLen,sizeof(input));
Run Code Online (Sandbox Code Playgroud)

Ale*_*lds 5

sizeof(input)返回指针的大小input,即8个字节.

通过C FAQ:

问:为什么不sizeof告诉我指针所指向的内存块的大小?

答:sizeof告诉你指针的大小.没有可移植的方法来找出malloc'ed块的大小.(还记得,它sizeof在编译时运行,另见问题7.27.)

如果要跟踪容量input,则需要使用单独的变量,或者input在堆栈上声明为数组,并将数组的大小除以数组中单个元素的大小.将容量保存为单独的变量几乎总是更容易.