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

C语言程序错误排查请求:请分析函数功能、main输出并定位问题

C语言程序错误分析、函数功能及输出说明

一、程序存在的错误

  • 内存访问非法:char* string3="\0"; 定义的是字符串常量,存储在只读数据段。函数f中对*tp3++的赋值操作试图修改只读内存,会触发未定义行为,通常表现为程序崩溃或异常。
  • 逻辑与需求不符:需求是将string2和string1的内容追加到string3之后,但函数f实际是把string1和string2逆序拷贝到目标空间,完全违背需求。

二、函数f的实际功能

函数f的执行流程如下:

  1. 遍历p1和p2,找到两个字符串的末尾位置
  2. 从p1的最后一个有效字符开始,逆序将内容拷贝到p3指向的内存
  3. 接着从p2的最后一个有效字符开始,逆序拷贝到p3的后续空间
  4. 在拷贝完成后添加字符串结束符\0,返回p3的起始地址

简单来说,该函数是把string1和string2分别逆序后拼接,存入p3指向的内存区域。

三、main函数的输出情况

由于string3指向只读内存,函数f中的写入操作会触发未定义行为,程序几乎必然崩溃,无法正常输出内容;即使侥幸未崩溃,输出的也是不可预测的垃圾数据。

修复方案示例

如果要实现需求中的功能,需要做两处修改:

  1. 给string3分配可写且足够大的内存:
    char string3[20] = "\0"; // 大小需容纳string1+string2的长度+1
    
  2. 修改函数f为正序拷贝逻辑:
    char* f(char *p1, char *p2, char *p3)
    {
        char* tp3 = p3;
        // 正序拷贝string1到p3
        while (*p1)
            *tp3++ = *p1++;
        // 正序拷贝string2到p3后续
        while (*p2)
            *tp3++ = *p2++;
        *tp3 = 0;
        return p3;
    }
    

内容的提问来源于stack exchange,提问作者Isidoro D'arco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:05:27