You need to enable JavaScript to run this app. C语言通过函数拼接两个指针字符串无输出,代码存在什么问题?
优惠活动
大模型
产品
解决方案
定价
更多

C语言通过函数拼接两个指针字符串无输出,代码存在什么问题?

问题排查及修复方案

存在的错误点

  • 函数返回值类型错误:concaten函数定义的返回值是char,但实际需要返回拼接后的字符串首地址,正确的返回值类型应为char*
  • 结果指针未分配内存:代码中char *result仅定义了指针没有申请对应大小的堆空间,属于野指针,直接写入内容会触发内存访问异常
  • 遍历赋值逻辑错误:两个循环中同时对索引变量自增两次,且没有移动原字符串的读取指针,会导致字符漏读、数组越界
  • 缺失字符串结束符:C语言的字符串必须以\0作为结束标识,代码拼接完内容后没有补充结束符,printf读取时无法识别字符串边界
  • 内存泄漏隐患:如果在函数内申请堆内存,外部使用完后必须手动释放,否则会造成内存泄漏

修正后代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 函数返回值改为char*
char* concaten(const char *str1,const char *str2);

int main()
{
    char *res = concaten("Code","blocks");
    printf("%s",res);
    // 释放申请的堆内存
    free(res);
    return 0;
}

char* concaten(const char *str1,const char *str2) {
    int i=0,j=0;
    // 计算两个字符串的长度,加1是为了存结束符\0
    int len1 = strlen(str1), len2 = strlen(str2);
    // 申请对应大小的堆内存
    char *result = (char*)malloc(sizeof(char)*(len1 + len2 + 1));
    // 内存申请失败的异常处理
    if(result == NULL) {
        return NULL;
    }
    // 拼接第一个字符串
    while(str1[i]){
        result[i] = str1[i];
        i++;
    }
    // 拼接第二个字符串
    while(str2[j]){
        result[i+j] = str2[j];
        j++;
    }
    // 补充字符串结束符
    result[i+j] = '\0';
    return result;
}

运行后即可正常输出Codeblocks。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 21:24:02