【发布时间】:2017-01-22 23:34:43
【问题描述】:
对于下面的 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));
【问题讨论】:
-
强制转换 malloc 不好 - 请参阅 stackoverflow.com/questions/605845/…
-
sizeof(char)- 这总是 1 -
getline()函数在其返回值中报告读取了多少个字符。您应该使用它而不是其他任何东西来判断输入的长度。使用strlen()通常会给出相同的答案,但用户可以在输入流中输入空字节(通常是Control-@),然后strlen()会给出更短的答案。请注意,如果用户键入的字符数超过 9 个(包括换行符),则inputLen中的值可能会大得多。另外,getline()的第二个参数应该是size_t *;这不一定与unsigned long相同。 -
就问题而言,您可以将代码简化为
printf("%d", sizeof(char*));。