问题描述
我知道 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]
不等于字符 %
。有人可以让我知道程序有什么问题吗?
解决方法
施工让 forward
前进得太远了。这是因为即使循环条件为假(因为它在循环条件内),后增量也会运行。明显的固定循环如下:
for (;*forward != '\0'; ++forward)
printf("%d\n",forward_length++);
如果您更喜欢保留 while 循环,则在 while 循环之后的 --forward
将修复它。