【问题标题】:return value of scanf() for string字符串的 scanf() 的返回值
【发布时间】:2019-11-12 17:53:21
【问题描述】:

此代码 ...

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() 返回的是哪个内存地址,为什么是十六进制的,为什么它返回字符串的内存地址,而它返回数字和字符常量的输入数?

【问题讨论】:

  • 读取 printf() 和 "%p" 的格式说明;这解释了十六进制格式。另请阅读有关 scanf() 的结果值。然后请注意,将整数 c 作为指针输出是没有意义的。最重要的是,尝试阅读一本也涵盖调试的 C 语言书籍。

标签: c scanf return-value


【解决方案1】:

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

【讨论】:

  • 但是为什么它在成功转换的情况下显示一个十六进制代码而不是整数,就像其他人一样?
猜你喜欢
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2012-07-24
  • 2016-08-26
相关资源
最近更新 更多