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

C++输入反转输出问题:使用char*变量ret编译报错求助

解决C++中数字反转后赋值给char*变量的错误问题

嘿,我来帮你看看这个问题~你的代码里有几个关键的错误导致了编译或运行时问题,我一步步给你解释和修正:

首先说说你代码里的核心问题

  • 临时字符串指针失效:你用temp_str.c_str()得到的指针,只在temp_str这个局部字符串对象存在时有效。当代码执行到ret = char_type之后,temp_str很快就会被销毁(出了它的作用域),此时ret指向的是一块已经被释放的内存,后续cout输出时就会触发未定义行为,这也是你看到错误的主要原因之一。
  • 函数未完成实际功能:reserve_num_from_int_to_char函数虽然用new分配了char数组,但根本没把反转后的数字写入进去,直接返回了空数组;之后你又把ret指向了临时指针,导致原来new的内存没人释放,造成内存泄漏。
  • 错误的内存释放:最后你delete[] ret时,ret指向的是temp_str.c_str()返回的指针,这块内存不是用new分配的,delete它会直接触发错误。

修正后的完整代码

#include <iostream>
#include <sstream>
#include <cstring>
using namespace std;

char* reserve_num_from_int_to_char(int num) {
    // 先将数字转换为字符串
    stringstream strs;
    strs << num;
    string temp_str = strs.str();
    
    // 分配足够内存:字符串长度 + 1(C风格字符串需要末尾的'\0')
    char* output = new char[temp_str.length() + 1];
    // 将字符串内容复制到分配的内存中
    strcpy(output, temp_str.c_str());
    
    return output;
}

int main() {
    int input, reversednumber = 0, remainder;
    cout << "input : " << endl;
    cin >> input;
    
    // 保存原始输入(避免循环中修改input后丢失原数据)
    int original_input = input;
    
    // 执行数字反转逻辑
    while(input != 0) {
        remainder = input % 10;
        reversednumber = reversednumber * 10 + remainder;
        input /= 10;
    }
    
    // 调用函数获取存储反转数字的char*指针
    char* ret = reserve_num_from_int_to_char(reversednumber);
    
    cout << "output : " << ret << endl;
    
    // 正确释放用new分配的内存,避免泄漏
    delete[] ret;
    return 0;
}

关键改动说明

  1. 完善reserve_num_from_int_to_char函数:现在这个函数真正实现了将数字转换为动态分配的char*的功能——先通过stringstream把数字转成string,再分配足够的内存(包含字符串结束符'\0'),最后用strcpy把字符串内容复制到分配的内存里,返回的指针指向的是合法且可被释放的内存。
  2. 避免临时指针失效:现在ret指向的是new出来的独立内存块,不再依赖临时字符串的生命周期,cout输出时不会访问无效内存。
  3. 正确管理内存:最后delete[] ret释放的是之前new分配的数组,符合C++内存管理规则,不会触发错误。
  4. 补充必要头文件:添加了<iostream>(cout和cin需要它),并将<string.h>替换为C++标准的<cstring>头文件。

另外补充个小细节:如果输入负数(比如-123),这个代码会正确反转成-321;如果输入0,反转后还是0,都能正常处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 13:02:28