对于以下 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
前提是您以空终止它。