【问题标题】:C: Passing a char* to a %s in a printf statementC:在 printf 语句中将 char* 传递给 %s
【发布时间】:2017-03-08 03:39:02
【问题描述】:

我正在准备期中考试,但在理解某个概念时遇到了一些困难。问题来了:

以下代码行的输出是什么:

char S1[50] = "jack", S2[50] = "jill", S3[50], *Sptr;

printf("%c$s\n", toupper(S1[0]), &S1[1]);

输出是

Jack

我不明白,为什么要打印“Jack”。 %s 应该打印一个字符串,对吗? &S1[1] 是字符串吗?我以为是S1[1]的地址。不是这样吗?

感谢您的帮助。

【问题讨论】:

  • 我相信你的意思是%c%s\n。您的原始代码中有这个错字吗?
  • %s 的参数是指向字符串第一个字符的指针。 S1[1]的地址就是这样。

标签: c string pointers memory-address


【解决方案1】:

printf("%c%s\n", toupper(S1[0]), &S1[1]);

让我们分解一下

%c 和对应的S1[0] 打印 S1 的大写第一个字符。 (J)

%s 和对应的&S1[1] 打印字符串的其余部分。 (确认)

&S1[1] 正在传递字符串第二个字符的内存地址。

【讨论】:

    【解决方案2】:

    &S1[1] 是一个地址,它指向 'jack' 的 'a'。所以 %s 表示显示从 'jack' 的 'a' 到结尾的字符串。通常 '\0' 是字符串的结尾。这意味着 '%s' 打印出 'jack' 的 'ack'。 '%c' 打印一个字符,即 J。toupper() 只改变一个字符。

    【讨论】:

    • '\0' 始终是字符串的结尾。这就是“字符串”的定义
    猜你喜欢
    • 2016-04-27
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多