C 语言中的 malloc() 行为



对于以下 C 代码,我希望当我只输入一个字符时,最后一个 printf 会打印"10,10"。 相反,它打印"10,8"。 为什么input 8 字节时只有 10 个字节?

char* input;
unsigned long inputLen = 10;
input = (char*) malloc(10 * sizeof(char));
printf("Input: ");
getline(&input,&inputLen,stdin);
printf("%lu,%d",inputLen,sizeof(input));

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

通过 C 常见问题解答:

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

答:sizeof告诉您指针的大小。没有便携式方法来找出malloc块的大小。(还要记住,sizeof在编译时运行,另请参阅问题 7.27。

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

为什么输入只有 8 个字节,而我 malloc 10 个字节?

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

这是因为input是一个char*。您应该考虑使用 strlen前提是您以空终止它。

相关内容

  • 没有找到相关文章