对于以下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));
答案 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)
这是因为input
是char*
。您应该考虑使用strlen
,前提是null终止它。