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 — 输入是字母或标点符号。
这段代码 ...
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 — 输入是字母或标点符号。