C中的malloc()行为

时间:2017-01-22 23:34:43

标签: c malloc

对于以下C代码,我希望打印最后一个printf" 10,10"当我只输入一个字符时。相反,它打印" 10,8"。当我malloc 10个字节时,为什么input只有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));

3 个答案:

答案 0 :(得分:5)

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

通过C FAQ

  

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

     

答:sizeof告诉你指针的大小。没有可移植的方法来查找malloc' ed块的大小。 (请记住,sizeof在编译时运行,另请参阅question 7.27.

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

答案 1 :(得分:3)

  

为什么在malloc 10个字节时只输入8个字节?

因为input是指针,指针在您的平台上是8个字节。 sizeof函数只是告诉你在编译时确定的类型大小。

答案 2 :(得分:0)

这是因为inputchar*。您应该考虑使用strlen,前提是null终止它。