首页 > 解决方案 > 在 C 中检查字符串空终止符

问题描述

我知道 C 中的空终止符由什么表示,\0并且数值为 0。但是,当我执行下面的代码时,程序将空终止符视为%. 我在网上搜索了这个,但我找不到有这个问题的人。

int main(){
    char* forward = "hello";
    int forward_length = 0;
    while (*(forward++) != '\0') {
        printf("%d\n", forward_length++);
    }
    if(*forward == '%'){
        printf("Terminator Found");
    }
}

输出是:

0
1
2
3
4
Terminator Found

显然,forward[5]不等于 char %。有人可以让我知道程序有什么问题吗?

标签: cnull-terminated

解决方案


建设离开forward太远了。这是因为即使循环条件为假(因为它在循环条件内),后增量也会运行。明显的固定循环如下:

   for (;*forward != '\0'; ++forward)
       printf("%d\n", forward_length++);

如果您更喜欢保留 while 循环,--forward则在 while 循环之后会修复它。


推荐阅读