在C中混淆了这个输出

时间:2017-09-16 01:38:36

标签: c

#include<stdio.h>

int main()
{

    char *s="Peace";
    printf("%s\n",s);
    printf("%s\n",s+1);
    printf("%s\n",s++);

}

输出:

Peace
eace
Peace

我的查询是{I} s++我应该打印"eace"而不是"Peace"。为什么会这样?

另一个问题是char *s="Peace";这一行将字符串文字存储在一个匿名数组中,所以当s指向'P'时,但当我printf("%d\n",s);写这个时,它怎么能够打印所有字符串?不应该只打印"P"

3 个答案:

答案 0 :(得分:4)

s++帖子 -increment操作。它返回当前s 然后增量s。要获得您想要的内容,您需要使用 pre -increment,++s

答案 1 :(得分:3)

您对s ++的评价,增量是在估值之后。如果您希望在使用之前增加,那么您应该使用++ s。更改此小位将导致所需的输出。

试试这个:

char *s="Peace";
int counter;

for (counter=0;counter<=strlen(s);++counter)
{
    printf("%s\n",s+counter);
}

答案 2 :(得分:2)

让我们逐行解码:

char *s="Peace";

此处s指向&#39; P&#39;

printf("%s\n",s);

打印整个字符串&#34; Peace&#34;由于s位于&#39; P&#39; 那是%s实际上

printf("%s\n",s+1);

现在s处于&#39; e&#39; ,所以它将打印&#34; eace&#34;。

printf("%s\n",s++);

这也将打印&#34; eace&#34;因为您使用了后增量运算符。如果您使用了++s,那么它会打印&#34; ace&#34;。