【问题标题】:Printing 2d Array Elements with Printf [closed]使用 Printf 打印二维数组元素 [关闭]
【发布时间】:2014-09-30 02:59:35
【问题描述】:

这些行都从数组中打印出正确的条目,但每行只打印每个元素的 3 个字符,而不是定义每个元素的 4 个字符。是否有我应该使用或更改的 Printf 的默认设置?

    printf("at time[0][0]: \n%s \n",&time[0][0]);
    printf("at time[3][0]: \n%s \n",&time[3][0]);
    printf("at time[5][0]: \n%s \n",&time[5][0]);

【问题讨论】:

  • 在打印时显示time 的定义以及您认为它的值。
  • %s 用于打印 string (这是一系列 char 后跟空终止符)。您没有为任何人发布足够的代码来检查 time[n] 是否真的包含字符串。
  • 这一切都取决于时间[][],显示声明以及如何填写以回答您的问题。
  • 那么,问题出在哪里?我多次重新阅读您的问题,但我没有看到任何关于问题是什么以及为什么会出现问题的解释。我隐约怀疑“3 个字符”显然是错误的。但是您从未说过您希望看到打印多少个字符以及为什么不应该是 3 个。
  • 马克,在尝试重新提出您的问题之前,您应该阅读 cmets 并实施他们的建议。

标签: c arrays printf


【解决方案1】:

使用 %c 格式说明符打印...
从 printf 中删除 &...
如果要打印数组的整行,请仅使用行索引...

【讨论】:

  • 鉴于问题中缺乏信息,这过于强调了。鉴于 char time[6][20]; 已适当初始化,使用问题中显示的 printf() 语句是完全合法的。问题是:我们不知道时间数组是怎么定义的。
【解决方案2】:

%s 是空终止字符数组的格式说明符。因此,在您的情况下,如果时间被声明为 time[][](二维数组),那么 time[0]、time[3]、time[5] 是单独的以空字符结尾的字符数组。 time[0][0] 表示只有一个字符(缓冲区中的第一个字符)。 &time[0][0] 的含义与 time[0] 相同。检查是否有 time[0][3] 为 0 或 '\0' 或检查缓冲区是否为空终止,如果没有,请这样做。

【讨论】:

  • 缓冲区不是以空值结尾的,并且条目是 4 个字符,因此 printf 正在从条目末尾退后一个字符。谢谢。
猜你喜欢
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
相关资源
最近更新 更多