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

C++自定义字符串反转函数调用返回"结果异常问题求助

问题原因

  • 下标访问越界触发未定义行为:
    C++ std::string 的合法下标范围为 0 到 str.length() - 1,你代码中的循环从 str.length() 开始遍历、直到 -1 结束:首先 str[str.length()] 是字符串末尾的隐式终止符 \0,不属于有效业务内容;其次 str[-1] 是字符串起始地址前的非法内存,读取结果完全不可控。你遇到的返回空串的现象,本质就是第一个写入结果的字符是 \0,多数测试框架按C风格字符串判断返回值时,遇到\0就会判定为字符串为空。
  • 全局变量未清空导致结果异常:
    你把存储结果的result定义为全局变量,每次调用函数时不会自动清空,不仅多次调用会出现结果累加的问题,全局变量初始残留的未知内容也可能干扰输出结果。你观察到的std::cout输出符合预期属于未定义行为的巧合表现,不代表逻辑正确。

修复方案

  1. 将result改为函数内部的局部变量,每次调用自动初始化为空字符串,避免跨调用污染。
  2. 调整循环下标范围,从最后一个合法下标str.length() - 1开始遍历,到第一个合法下标0停止。

修复后代码如下:

#include <iostream>
#include <string>
using namespace std; 

string reverseString (string str)
{
  string result;
  for(int i = str.length() - 1; i >= 0; i--) {
    result += str[i];
  }
  cout << result;
  return result;
}

如果不需要手动实现反转逻辑,也可以直接调用标准库算法简化代码:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

string reverseString (string str)
{
  reverse(str.begin(), str.end());
  cout << str;
  return str;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:06:03