我创建了一个字符串列表,并使用以下代码进行打印:
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
,没有剩余的字符串?
答案 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
。