每日一题(45)—— 字符数组找错

void test2()
{
    char str1[10], str2[10];
    int i;
    for(i=0; i<10; i++)
    str1[i] = 'a';
    strcpy( str2, str1 );
}

这段代码有什么问题?







解答:如果面试者指出字符数组str1不能在数组内结束可以给3分;如果面试者指出strcpy(str2, str1)调用使得从str1复制到str2的字节数具有不确定性可以给7分,在此基础上指出库函数strcpy工作方式的给10分。

str1不能在数组内结束:因为str1的存储为:{a,a,a,a,a,a,a,a,a,a},没有'\0'(字符串结束符),所以不能结束

strcpy(char *s1,char *s2)他的工作原理是,扫描s2指向的内存,逐个字符付到s1所指向的内存,直到碰到'\0',因为str1结尾没有'\0',所以具有不确定性,不知道他后面还会付什么东东。

正确应如下:

void test2()
{
    char str1[10], str2[10];
    int i;
    for(i=0; i<9; i++)
    {
        str1[i] = 'a'+i; //把abcdefghi赋值给字符数组
    }
    str[i]='\0';//加上结束符
    strcpy( string, str1 );
}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值