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

C语言循环处理四则运算表达式时数组运算值被覆盖问题求解

问题根因

  • 核心问题是你所有计算得到的乘积结果都存在同一个字符数组tresult里,赋值时equation[i - 1] = tresult只是把指针指向了tresult的首地址,并没有拷贝内容。每次循环执行sprintf(tresult, "%d", result)都会覆盖掉tresult里的旧值,循环结束后tresult里存的是最后一次计算的结果2,所以所有指向它的equation元素读取到的都是2,这就是第一个位置本该是15却变成2的原因。
  • 额外注意:你直接对equation[i]、equation[i+1]调用sprintf写入数据存在隐患,这两个指针本质是strtok返回的、指向输入字符串内部的地址,如果你的输入字符串是存在只读内存段的常量,会直接触发段错误。

修复方案

最简单的修改方式是每次计算完结果后,给数值分配独立的内存存储,把原来的赋值行替换为:

// 替换原代码:equation[i - 1] = tresult;
equation[i - 1] = strdup(tresult);

strdup会自动申请足够的内存拷贝tresult的内容,返回的指针指向独立的内存空间,不会被后续的tresult写入覆盖。如果你的运行环境不支持strdup,也可以手动实现等价逻辑:

char *dup_str = malloc(strlen(tresult) + 1);
if (dup_str != NULL) {
    strcpy(dup_str, tresult);
    equation[i - 1] = dup_str;
}

注意后续所有使用完equation数组后,要手动释放动态申请的内存,避免内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:06:03