我打印这个字符串列表的方式有什么问题?

What is wrong with how I'm printing this string list?

我创建了一个字符串列表并使用以下代码打印它:

int i;
char* p = "My[=10=]name[=10=]is[=10=][=10=]";
for (i = 0; *(p + i) != '[=10=]' && *(p + i + 1) != '[=10=]'; i++)
{
    if (*(p + i) == '[=10=]')
        printf(" ");
    else
        printf("%c", *(p + i));
}

为什么只打印 M,而没有打印其余字符串?

对于i == 1的值,条件检查语句

*(p + i) != '[=10=]' && *(p + i + 1) != '[=10=]'

失败(评估为 FALSE),因此 for 循环终止。

根据您的意图,您可以将条件检查修改为

for (i = 0; !(*(p + i) == '[=11=]' && *(p + i + 1) == '[=11=]'); i++)
{
    if (*(p + i) == '[=11=]')
        printf(" ");
    else
        printf("%c", *(p + i));
}

翻译成人类可读的逻辑,看起来像,

继续,直到 *(p + i)*(p + i + 1) 都为 '[=16=]'

*(p + i + 1)

i 为 1 时将等于 [=11=]