|
10鱼币
题目 一:以下正确的程序段是___
A char str1[]="12345",str2[]="abcdef";
strcpy(str1,str2);
B char str[10], *st="abcde";
strcat(str,st);
C char str[10]=" ",*st="abcde";
strcat(str,st);
D char *st1="12345", *st2="abcde";
strcat(st1,st2);
答案为C,想问下D为什么错,书上给字符串连接函数strcat(str1,str2)定义的时候,说了str1,str2是地址表达式,
可以为数组名或指针变量,为什么D是两个指针就不行了呢,网上搜的给的解释是指针st1指向的字符串不能变
题目二:若有语句:char s1[]="string",s2[8],*s3,*s4="string2";则对库函数strcpy的错误调用是______
A strcpy(s1,"string2");
B strcpy(s4,"string1");
C strcpy(s3,"string1");
D strcpy(s1,s2);
答案是C,如果按照题目一解释的指针指向的字符串不能随便改变,那B选项s4是不是就错了啊
这两题很迷惑,感觉有点自我矛盾,求高人详解,重赏
本帖最后由 4goodworld 于 2020-3-16 20:03 编辑
我觉得你得站在strcat和strcpy的使用要求上看,先不考虑编译成功的其他因素,
题一,D的选项,*st1的长度是5,你让它后面再加一串长度为5字符串,肯定溢出
题二,*s3,可以认为是一个没有赋值的指针,指针指向什么都不清楚,危险不危险,万一是NULL呢?如果操作它复制,要不要出事?其他几个选项,在不考虑常量不常量的情况下,都是符合两个函数执行的要求的
|
最佳答案
查看完整内容
我觉得你得站在strcat和strcpy的使用要求上看,先不考虑编译成功的其他因素,
题一,D的选项,*st1的长度是5,你让它后面再加一串长度为5字符串,肯定溢出
题二,*s3,可以认为是一个没有赋值的指针,指针指向什么都不清楚,危险不危险,万一是NULL呢?如果操作它复制,要不要出事?其他几个选项,在不考虑常量不常量的情况下,都是符合两个函数执行的要求的
|