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; } }
修正逻辑说明
- 找到
\0后先回退1个指针位置,跳过结束符,从最后一个有效字符开始输出 - 终止条件改为判断指针地址是否大于等于字符串首地址
name,遍历完所有有效字符就立刻停止,不会越界读取内存
内容的提问来源于stack exchange,提问作者ANTOINE
相关产品推荐
相关产品推荐

