return 字符串的 scanf() 值

return value of scanf() for string

这段代码 ...

void main()
{

char str[5];

long int c=scanf("%s",str);
printf("\n%p %p %p %p", c, &str[0], &str[1], &str[4]);

}

...

给出了输出: ...

bhjun //thats the input

0x1 0x7ffe98cdf5a3 0x7ffe98cdf5a4 0x7ffe98cdf5a7

...

我能理解字符串字符的内存地址之间的关系,但是scanf()是哪个内存地址return,为什么是十六进制的,为什么return字符串的内存地址while它 returns 数字和字符常量的输入数量?

scanf() 函数 returns 指定值的成功转换规范的数量(因此 %*s 不计算在内,但 %s 计算在内),或者它 returns EOF。因此,原则上,您可以从显示的 scanf() 调用中获取 EOF、0 或 1 — 实际上,您将获取 EOF 或 1,因为 %s 将接受任何非白色的字符 space。如果转换为数字,您可能很容易返回 0 — 输入是字母或标点符号。