为什么我看不到数组中的最后一个字符是空终止符?

Why I can't see that last char in array is null terminator?

如何检查 char 数组是否以 null 结尾?

char input[80];

fgets(input, sizeof(input), stdin);

for (i = 0; input[i]; i++)
{
    if (input[i] == '[=10=]') {
       printf("null!!!"); // never works
    }
}

例如,下面的代码不会打印 null.

在您的 for 循环条件中,您已经在检查 input[i] 的非 0 值,因此内部 ifdead条件。

要进行测试,请进行无限循环,检查 if,然后打印并 break 输出。像

for (i = 0; ; i++)
{
    if (input[i] == '[=10=]') {
       printf("null!!!\n");  // now works
       break;
    }
}

只要 input[i] 为 0,循环就会退出,因此永远不会执行打印语句。

如果您有兴趣,这是另一个工作代码:

#include <stdio.h>
#include <stdlib.h>

int main() {
    char input[] = "I am a string !!";
    int i = 0;
    while(1) {
        if (input[i] == '[=10=]') {
           printf("null!!!");
           break;
        }
        i++;
    }
}

这里的所有答案都不检查内存边界,所以你肯定会 运行 进入分段错误。 不过,如果在 [=11] 期间发生错误=]ing,你可能在 input 中有垃圾。

char input[80];

fgets(input, sizeof(input), stdin);

for (i = 0; i<80; i++)
{
    if (input[i] == '[=10=]') {
        printf("null!!!"); 
    }
}

您也可以将 if (input[i] == '[=13=]') 更改为 if (! input[i]),因为 '[=15=]' (null-terminator) 的 ASCII 值为 0