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

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

img

img

答:随便定的,满足最长的数据即可,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;
}



20是数组空间长度,这里只是把空间定的大了而已没有其他意义,至于strcpy函数是把第二个参数复制给第一个参数

随便写的,不要转牛角尖