【问题标题】:typecasting syntax not clear类型转换语法不清楚
【发布时间】:2011-03-24 09:17:22
【问题描述】:

我在看书时遇到了一个程序,可以从/proc 文件中读取条目。 他们提到的程序有以下几行

printf("%.*s", (int) n, line);

我不清楚上面那行的意思

  1. 如果上面使用"%.*s而不是%s,则使用哪种类型的打印

代码可以阅读here

【问题讨论】:

  • 您查看过printf 的手册页吗?
  • @Jens Gustedt 是的,我确实读到了,您能否将手册页的摘录发布到您想引起我注意的部分。
  • 字段宽度: 一个可选的十进制数字...而不是十进制数字字符串,可以写成“*”或“*m$”(对于一些十进制整数 m ) 指定字段宽度在下一个参数中给出,..
  • @Jens Gustedt 感谢我刚刚检查过 Ubuntu 网站manpages.ubuntu.com/manpages/intrepid/man3/printf.3.html 的信息,我发现您所说的定义仅在联机版本的手册页中,而不是在我笔记本电脑上的手册页中。
  • 啊,这很奇怪。我的电脑上有这个,我有一个 unbuntu 10.4。

标签: c casting printf


【解决方案1】:

摘自here

.* - 未指定精度 格式字符串,但作为 附加整数值参数 在必须是的论点之前 格式化。

所以这会从行字符串中打印最多 n 个字符。

【讨论】:

    【解决方案2】:

    转换表达式 (int) n 将n 的值转换为int 类型。这是因为格式化说明符需要一个普通的int,我假设(因为你没有包含它)变量n 具有不同的类型。

    由于不同的类型,如size_t,可能有不同的大小,如果没有显式转换为int,则传递给printf() 的参数会产生问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-25
      • 2017-05-28
      • 2011-11-22
      • 2011-08-14
      相关资源
      最近更新 更多