c语言字符输出问题很奇怪为什么这样输出

#include <stdio.h>
#include<string.h>
int main(void) {

int i;
char* mystr = "Dream of China";
for (i = 2; i < strlen(mystr) - 2; i++)
{
printf("%c", (mystr + i));
};
return 0;
}
输出结果是
Dream of China*
为什么为什么呢这是

解释如下:

 mystr是字符串的首地址,在for循环中,i从2开始遍历,遍历的长度到strlen(mystr) - 2,也就是最后的两个 * 字符不会被显示。
    mystr + 0对应第一个字符 *
    mystr + 1对应第二个字符 *
    mystr + 2对应第三个字符 *
    mystr + 3对应第四个字符 *
    mystr + 4对应第五个字符 *
    mystr + 5对应第六个字符 D
    mystr + 6对应第七个字符 r
    mystr + 7对应第八个字符 e
    ... 以此类推
        在for循环中从i = 2开始循环输出(也就是从第3个*开始输出),直到倒数第二个字符为止(最后二个字符不输出)。
        这时候的输出结果是***Dream of China***

整个mystr都输出了?
代码最好用代码块贴出来,不然丢失很多*号,看不清楚

int main(void) 
{
    int i;
    char* mystr = "*Dream of China*";
    for (i = 2; i < strlen(mystr) - 2; i++)
    {
        printf("%c", *(mystr + i));
    }
    return 0;
}

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632