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

C语言自定义copy函数返回值与原数组不一致问题排查

C语言中从函数更新并返回字符串的常见误解

我是一名学生,刚开始学习动态内存分配技术。最近我需要实现一个类似C标准库<string.h>中strcpy()的字符串copy()函数。

该函数接收两个参数:char c1[]、char c2[]。目前我聚焦于字符串c1长度小于c2的场景,即需要将更长的字符串复制到更短的字符串中,因此需要扩容前者的内存空间。(我已实现一个len()函数用于返回字符串长度,功能正常)

代码如下:

char* copy(char c1[],char c2[])
{
    int i=0;
    int lc1=len(c1);
    int lc2=len(c2);
    if(lc1<lc2)
    {
                //以下两行是否合法?
        c1=(char*) malloc(lc1*sizeof(char));
        c1=(char*) realloc(c1,lc2*sizeof(char));
        for(i=0;i<lc2;i++)
        {
            *(c1+i)=c2[i];
        }
        *(c1+lc2)='\0';
    }
    return c1;
}

我知道这段代码存在多个问题!
我通过以下代码测试:

#include <stdio.h>
#include <string.h>
#include "mystring.h"
main()
{
    int i;
    char s1[12],s2[12];
    gets(s1);
    gets(s2);
    printf("copy: %s",copy(s1,s2));
    printf("\ns1: %s",s1);
}

我期望copy函数的返回值与s1的输出一致,但只有直接打印函数返回值时结果正确,打印s1却无法得到复制后的内容。

我哪里出错了?我认为这与变量作用域、指针或内存分配相关!

编辑:
我还实现了一个替代函数xcopy:

char* xcopy(char c1[])
{
    int i=0;
    int lc1=len(c1);
    char* c2=(char*) malloc((lc1+1)*sizeof(char));
    for(i=0;i<lc1;i++)
    {
        *(c2+i)=c1[i];
    }
    *(c2+lc1)='\0';
    return c2;
}

我意识到这个函数并未解决实际问题。


感谢您的帮助!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:02:38