2301_79920703 2023-12-14 13:49 采纳率: 92.6%
浏览 2
已结题

c语言字符串复制和链接


//链接两个字符串
//先malloc分配两个字符串长度之和的空间
//再将第一个复制上去
//最后strcat链接
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void fuzhi(char *a,char *b)//把a复制给b
{
    while(*a!='0')
    {
        *b=*a;
        a++;
        b++;
    }
    *b='\0';
}

int main()
{
    char a[]="I love JNU,";
    char b[]="which is a beautiful campus.";

    char *c=NULL;
    int len=strlen(a)+1+strlen(b)+1;
    c=(char *)malloc(sizeof(char)*len);//先分配空间
    memset(c,0,sizeof(char)*len);//初始化
    fuzhi(a,c);
    printf("%s\n",c);

    //strcpy(c,a);
    strcat(c,b);
    
    printf("%s\n",c);
    

    free(c);//释放!


    return 0;
}

1.如图所示

img


会报错,执行不下去

2.如果加上这一行代码

img

可以执行

img

但是到free这里就停住了

img

这是为什么呀

3.如果不引用写的函数,用strcpy复制的话,那么是可以正常运行的
4.写的那个fuzhi函数单独的可以正常运行

img

  • 写回答

3条回答 默认 最新

  • 爱编程的鱼 2023-12-14 14:09
    关注

    在你的代码中,有几个地方需要进行修正:

    1. fuzhi函数中,字符串的结束标志应该是'\0',而不是'0'。所以将while(*a!='0')改为while(*a!='\0')

    2. main函数中,你先调用了fuzhi函数将字符串a复制给了字符串c,然后使用strcpy函数复制了一遍。这是多余的,你可以注释掉fuzhi函数的调用,只使用strcpy函数即可。

    3. 在使用malloc函数分配内存之后,应该检查内存是否分配成功。可以使用if (c == NULL)来判断是否分配成功。如果分配失败,应该进行相应的错误处理。

    4. 在使用完动态分配的内存后,应该使用free函数释放内存,以防止内存泄漏。你已经在代码的最后使用了free(c),这是正确的。

    下面是修改后的代码:

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
     
    void fuzhi(char *a, char *b) // 把a复制给b
    {
        while (*a != '\0')
        {
            *b = *a;
            a++;
            b++;
        }
        *b = '\0';
    }
     
    int main()
    {
        char a[] = "I love JNU,";
        char b[] = "which is a beautiful campus.";
     
        char *c = NULL;
        int len = strlen(a) + 1 + strlen(b) + 1;
        c = (char *)malloc(sizeof(char) * len);
        if (c == NULL)
        {
            printf("内存分配失败\n");
            return 1; // 返回错误码
        }
        memset(c, 0, sizeof(char) * len);
        
        // fuzhi(a, c);  // 注释掉这行
        
        strcpy(c, a); // 使用strcpy函数复制a到c
        printf("%s\n", c);
     
        strcat(c, b);
        printf("%s\n", c);
        
        free(c);
     
        return 0;
    }
    

    这样修改后的代码应该能够正确地进行字符串复制和链接。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月22日
  • 已采纳回答 12月14日
  • 创建了问题 12月14日

悬赏问题

  • ¥15 LLM accuracy检测
  • ¥15 pycharm添加远程解释器报错
  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口
  • ¥15 如何能达到用ping0.cc检测成这样?如图
  • ¥15 关于#DMA固件#的问题,请各位专家解答!
  • ¥15 matlab生成的x1图不趋于稳定,之后的图像是稳定的水平线
  • ¥15 请问华为OD岗位的内部职业发展通道都有哪些,以及各个级别晋升的要求
  • ¥20 微信小程序 canvas 问题
  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式