CGL2230 2022-02-08 16:15 采纳率: 100%
浏览 87
已结题

计算机二级c语言题,有没有人帮忙解释一下

里面的a[20]{'a','b','c','d'}为啥是20啊,是随便定的为了满足数组空间需求还是有别的道理,还有那个strcpy函数是怎么用的啊,看不懂啊

img

img

  • 写回答

3条回答 默认 最新

  • 吴小凹 2022-02-08 17:07
    关注

    答:随便定的,满足最长的数据即可,strcpy有两个参数,第一个是目标地址,第二个就是数据,将数据放到目标地址,其中数据为q={'a','b','c','\0'}, 目标地址为p={'a','b','c','d','a','b','c','d','e','\0'},拷贝地址在原基础上加上了3,所以目标地址就覆盖了d后面的数据,拷贝过后结果是p={'a','b','c','a','b','c','\0''d','e'},字符串结尾为'\0',此时当计算函数到'\0'时就会结束计数。

    #include <stdio.h>
    //方便理解简单的写出库函数内部实现简单方法
    
    //计算长度
    int strlen_test(char* base)
    {
        int i;
        for(i=0;base[i]!='\0';i++);//找到结束标志,计算出长度
        return i;
    }
    //拷贝
    void strcpy_test(char* base,char* data)
    {
        int i=strlen_test(data),j;//计算出数据长度
        for(j=0;j<i;j++)//循环拷贝
        {
            base[j]=data[j];
        }
        base[j]='\0';
        
    }
    
    //字符拼接
    void strcar_test(char* base,char* data)
    {
        //i,数据长度,k初始数据长度
        int i=strlen_test(data),j,k=strlen_test(base);
        for(j=0;j<i;j++)//循环拷贝
        {
            base[k+j]=data[j];
        }
        base[k+j]='\0';
    }
    
    int main(void)
    {
        char p[20]={},q[]="abc",r[]="abcde";
        
        strcar_test(p,r);
        strcpy_test(p+strlen_test(q),q);
        printf("%d\n",strlen_test(p));
        return 0;
    }
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月17日
  • 已采纳回答 2月9日
  • 创建了问题 2月8日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度