我可以检查一个字符串是否以 null 终止但不检查它是否尚未以 null 终止

I can check if a string is null-terminated but not check it isn't yet null terminated

为了我更好地理解C++字符串、数组和指针;我想知道:为什么我可以使用一个条件来检查索引是否达到了这样的空终止字符...

const char* myString = "Grandopolous";
for (int i = 0;;i++)
{
    if (!myString[i])
        break;
    else
        cout << myString[i];
}

这样就可以了。在这里,我改为检查该字符是否等于 null 终止字符以外的其他内容,因此我希望如果不等于,则结果不应该为 0,并且条件应该为真。但这不起作用,我根本无法理解为什么:

const char* myString = "Grandopolous";
for (int i = 0;;i++)
{
    if (myString[i])
        cout << myString[i];
}

这在我的机器上不起作用并且会崩溃,它还会输出大量混合着奇怪符号的不可读的错误消息。我认为这部分并不重要,尽管这是第一次将错误打印到我的控制台应用程序而不是调试控制台。

我提到指针的原因是因为我设法使用指针而不是我发现更容易阅读的数组索引语法来使条件起作用。

所以有人可以帮助我理解为什么我的第一段代码有效而第二段代码无效。

确实有效。检查 null 不是问题。

你的程序崩溃是因为你去掉了 break 所以你的程序会溢出数组然后永远继续下去。

当您逐步执行程序并观察 i.

时,您的调试器肯定会向您揭示这一点

要反转第一个示例的逻辑,请编写:

const char* myString = "Grandopolous";
for (int i = 0;;i++)
{
    if (myString[i])
        cout << myString[i];
    else
        break;
}