我如何打印这个字符串列表有什么问题?

时间:2017-01-08 18:32:16

标签: c for-loop logical-operators

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

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

为什么这只打印M,没有剩余的字符串?

2 个答案:

答案 0 :(得分:3)

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

*(p + i) != '\0' && *(p + i + 1) != '\0'

失败( evonates to FALSE ),因此for循环终止。

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

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

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

继续,直到*(p + i)*(p + i + 1)'\0'

答案 1 :(得分:0)

*(p + i + 1)

\0为1时将等于i