【问题标题】:Need explanation for output of "puts" in C需要解释 C 中“puts”的输出
【发布时间】:2018-09-30 15:34:59
【问题描述】:

我正在寻找有关此代码 sn-p 输出的解释。我在网上搜索过,但没有找到满意的解释。

main()
{
     char x[10]="abcdefg" ;
     puts(&x[4]) ;
}

执行此代码后,我得到“efg”作为输出。

你能解释一下这个输出吗? 如果本平台不适用于此类问题,我们深表歉意。

【问题讨论】:

  • &x[4]x + 4 相同。也许puts(x + 4); 对你来说更容易?
  • 如果您知道字符串通常会看到指向字符串中第一个字符的指针,并且如果您知道x[4] 是哪个字符,那么应该很容易找出指向@ 的指针987654326@(即&x[4]给出的)应该是。

标签: c string pointers pointer-arithmetic puts


【解决方案1】:

&x[4] 是字符数组 x 的元素 4 在内存中的地址。 这意味着 puts 接收“efg”作为输入。

【讨论】:

  • 我会说元素五!!
  • 错误。元素 zero 始终是第一个元素。
  • 是的,我期待如此明确的提及不是作为评论而是在答案中。
【解决方案2】:

根据C11,第 7.21.7.9 章

int puts(const char *s);

puts 函数将 s 指向的字符串写入stdout 指向的流,并在输出中附加一个换行符。终止空字符不是 书面。 [...]

因此,在您的情况下,您将传递数组 x 中第五个元素的地址(是的,C 数组使用从 0 开始的索引)以及该字符串中的其余元素,直到终止 null 为打印出来的。

【讨论】:

    猜你喜欢
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多