【问题标题】:What is wrong with how I'm printing this string list?我如何打印这个字符串列表有什么问题?
【发布时间】:2017-01-08 18:32:16
【问题描述】:

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

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,没有字符串的其余部分?

【问题讨论】:

  • 要么你的字符串是空(零)终止的(然后你不能在里面有空字符)要么你知道它的长度。
  • 如果您以前从未使用过调试器,那么现在是学习它的最佳时机。使用调试器,您可以逐行执行代码,同时监视变量及其值。能够使用调试器对于任何想做任何类型编程的人来说都是一项至关重要的技能,即使是作为一种爱好。

标签: c for-loop logical-operators


【解决方案1】:

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

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

失败(评估为 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'

【讨论】:

  • 所以我应该用||替换&&
  • @UFCInsider -- 是的
【解决方案2】:
*(p + i + 1)

当i 为1 时将等于\0。

【讨论】:

    猜你喜欢
    • 2020-01-16
    • 2015-12-04
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 2020-11-08
    相关资源
    最近更新 更多