You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++字符遍历代码输出异常:预期Heo Word却得到eo World

问题原因分析&修复方案

你的问题出在指针后置递增运算符++的执行顺序上,咱们一步一步拆解:

核心问题

看这段关键代码:

while ( *p++ ) {
    if ( *p != 'l' ) cout << *p;
}

*p++是后置递增,它的执行逻辑是:

  1. 先读取当前p指向的字符(比如第一次循环时是'H'),用这个值判断循环条件(非空则继续)
  2. 再把指针p向后移动一位,指向当前字符的下一个

这就导致:

  • 第一次循环直接跳过了第一个字符'H':判断完'H'存在后,p已经移到了'e',循环体内输出的是'e',完全没处理'H'
  • 后续的字符判断也整体偏移了一位:原字符串里的第一个'l',循环体里判断的其实是第二个'l',最终就出现了eo World的错误输出

修复方案

咱们只需要调整指针递增的时机,确保先处理当前字符,再移动指针。有两种常见写法:

写法1:把递增放在循环体末尾

#include <iostream>
using namespace std;
int main() {
    char str[] = "Hello World\n";
    char* p = str;
    while ( *p ) { // 先判断当前字符是否有效
        if ( *p != 'l' ) 
            cout << *p;
        p++; // 处理完再移动指针
    }
}

写法2:用for循环更简洁

#include <iostream>
using namespace std;
int main() {
    char str[] = "Hello World\n";
    for (char* p = str; *p; ++p) { // 前置递增,逻辑更直观
        if (*p != 'l') cout << *p;
    }
}

这两种写法都会先处理当前指针指向的字符,再移动指针,最终就能得到预期的Heo Word输出。

内容的提问来源于stack exchange,提问作者ZAX9732

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:41:00