You need to enable JavaScript to run this app. 实现代数表达式去括号简化的C++代码运行后为何输出乱码?
优惠活动
大模型
产品
解决方案
定价
更多

实现代数表达式去括号简化的C++代码运行后为何输出乱码?

代码输出乱码的核心原因

本次输出的乱码和去括号的运算逻辑无关,是两处基础语法错误触发的未定义行为导致的:

  • 内存分配语法完全错误
    代码中写的char* res = new char(len);,实际语义是申请1个char类型的存储空间,用输入字符串的长度值初始化这个单字符,根本没有给结果字符串分配足够的数组空间。C++中分配字符数组的正确语法必须使用方括号:new char[长度]。
    现在的写法仅分配了1字节内存,后续往里面写入完整表达式结果时已经触发了内存越界,读取时自然会输出随机的乱码字符。
  • 未补充C风格字符串必需的结束符
    就算把内存分配修正为正确的new char[len],代码也没有在结果字符串的末尾手动添加\0空结束符。C++中用cout输出char*类型时,会从指针位置一直向后扫描内存,直到遇到随机的\0才停止,那些不属于预期结果的内存内容就会显示为ÿï┌这类乱码。

最小修正方案

仅需改动两处即可解决问题:

  1. 将内存分配语句修改为char* res = new char[len + 1];,多申请1字节专门用于存储结束符
  2. 在主循环结束、函数返回前,添加一行给字符串补结束符的代码:res[index] = '\0';

额外说明:这段代码还存在数组内存泄漏的问题(用new申请的数组没有对应的delete[]释放),但该问题不会影响本次的乱码表现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 05:06:08