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

时间:2016-01-27 15:53:00

标签: c arrays loops null null-terminated

如何检查char数组是否为空终止?

char input[80];

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

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

例如,以下代码不会打印null

4 个答案:

答案 0 :(得分:7)

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

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

这样的东西
break

答案 1 :(得分:2)

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

答案 2 :(得分:1)

如果您有兴趣,这是另一个有效的代码:

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

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

答案 3 :(得分:0)

此处的所有答案都不会检查内存范围,因此您肯定会遇到分段错误。但是,如果在fread期间发生错误,可能在input中有垃圾。

char input[80];

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

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

您也可以将if (input[i] == '\0')更改为if (! input[i]),因为'\0'(空终结符)具有ASCII值0