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

C++使用指针反转字符串出现乱码如何定位并移除多余符号

问题原因及修复方案

乱码产生根源

  • 第一个while (*p != '\0')循环结束时,指针p已经指向字符串末尾的\0结束符,第二个循环直接输出该位置值,还会继续向前越界读取内存
  • 第二个循环终止条件*p >= 0逻辑完全错误,无法正确停止遍历,会读取字符串缓冲区外的垃圾值,就是你看到的异常符号来源

修正后的指针实现代码

只需要修改reverse函数即可,保留纯指针实现逻辑:

void reverse(char name[])
{
    char *p = name;
    // 先遍历到字符串末尾的\0位置
    while (*p != '\0') {
        ++p;
    }
    // 回退1位到最后一个有效字符的位置
    --p;
    // 从末尾有效字符遍历到字符串首地址即可停止
    while (p >= name) {
        cout << *p;
        --p;
    }
}

修正逻辑说明

  1. 找到\0后先回退1个指针位置,跳过结束符,从最后一个有效字符开始输出
  2. 终止条件改为判断指针地址是否大于等于字符串首地址name,遍历完所有有效字符就立刻停止,不会越界读取内存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:15:05