指针,字符串函数问题
题目 一:以下正确的程序段是___A char str1[]="12345",str2[]="abcdef";
strcpy(str1,str2);
Bchar str, *st="abcde";
strcat(str,st);
C char str="",*st="abcde";
strcat(str,st);
Dchar *st1="12345", *st2="abcde";
strcat(st1,st2);
答案为C,想问下D为什么错,书上给字符串连接函数strcat(str1,str2)定义的时候,说了str1,str2是地址表达式,
可以为数组名或指针变量,为什么D是两个指针就不行了呢,网上搜的给的解释是指针st1指向的字符串不能变
题目二:若有语句:char s1[]="string",s2,*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呢?如果操作它复制,要不要出事?其他几个选项,在不考虑常量不常量的情况下,都是符合两个函数执行的要求的
本帖最后由 bin554385863 于 2020-3-16 18:29 编辑
用
char *str = "123688";
定义字符串的时候说明这个字符串是个常量,你能对常量做改变?
至于第二题,要么你错了,要么书错了,既然你是对的,拿肯定是书错了{:5_109:} bin554385863 发表于 2020-3-16 18:24
用
char *str = "123688";
定义字符串的时候说明这个字符串是个常量,你能对常量做改变?
第二题答案就是C啊,因为s3是个野指针啊 4goodworld 发表于 2020-3-16 20:01
我觉得你得站在strcat和strcpy的使用要求上看,先不考虑编译成功的其他因素,
题一,D的选项,*st1的长度 ...
题一,D定义的是两个指针,又不是数组,怎么就肯定溢出了呢 张世来4610484 发表于 2020-3-17 11:11
第二题答案就是C啊,因为s3是个野指针啊
对的 本帖最后由 4goodworld 于 2020-3-17 19:18 编辑
张世来4610484 发表于 2020-3-17 11:13
题一,D定义的是两个指针,又不是数组,怎么就肯定溢出了呢
用句流行的话:指针了不起吗?
对不起,指针不是你想为所欲为的,
举例,如果指针只是一个地址,为啥我们malloc的时候要给它长度呢?
难道就malloc出来指针有范围,其他的指针没有范围?你还搞歧视呢?哈哈
再具体说下
指针是内存地址
假设
*p1 指向的内存地址是0x00001
*p2指向的内存地址是0x00002
两者相差一个单位,
现在你准备,p1=“123456”,那么p1理论上指向的范围应该是从0x00001到0x00007
你要真这么操作了,p2就要跳起来,问你,你把我放那儿去?怎么?你还想搞歧视呢?
所以,你说指针有没有“界限”?
最后,我还想说,你得结合题目的题干来分析问题,不能想当然而把一些限制条件给抛弃了
char *st1="12345", *st2="abcde";
这两个是给定的
4goodworld 发表于 2020-3-17 19:06
用句流行的话:指针了不起吗?
对不起,指针不是你想为所欲为的,
举例,如果指针只是一个地址,为啥 ...
我刚才试了一下题二的B答案,发现也不行,是不是这种字符串的函数第一个不能用指针,尤其是已经复制的指针 在vc6上跑了一下第二题,情况如下:
题目二:若有语句:char s1[]="string",s2,*s3,*s4="string2";则对库函数strcpy的错误调用是______
A strcpy(s1,"string2");//通过
B strcpy(s4,"string1");//程序崩溃
C strcpy(s3,"string1");//指示s3没定义
D strcpy(s1,s2);//显示s2没定义 张世来4610484 发表于 2020-3-17 20:37
我刚才试了一下题二的B答案,发现也不行,是不是这种字符串的函数第一个不能用指针,尤其是已经复制的指 ...
我说了:我觉得你得站在strcat和strcpy的使用要求上看,先不考虑编译成功的其他因素,
页:
[1]