张世来4610484 发表于 2020-3-16 18:16:46

指针,字符串函数问题

题目 一:以下正确的程序段是___
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 18:16:47

本帖最后由 4goodworld 于 2020-3-16 20:03 编辑

我觉得你得站在strcat和strcpy的使用要求上看,先不考虑编译成功的其他因素,
题一,D的选项,*st1的长度是5,你让它后面再加一串长度为5字符串,肯定溢出
题二,*s3,可以认为是一个没有赋值的指针,指针指向什么都不清楚,危险不危险,万一是NULL呢?如果操作它复制,要不要出事?其他几个选项,在不考虑常量不常量的情况下,都是符合两个函数执行的要求的

bin554385863 发表于 2020-3-16 18:24:09

本帖最后由 bin554385863 于 2020-3-16 18:29 编辑


char *str = "123688";
定义字符串的时候说明这个字符串是个常量,你能对常量做改变?

至于第二题,要么你错了,要么书错了,既然你是对的,拿肯定是书错了{:5_109:}

张世来4610484 发表于 2020-3-17 11:11:38

bin554385863 发表于 2020-3-16 18:24

char *str = "123688";
定义字符串的时候说明这个字符串是个常量,你能对常量做改变?


第二题答案就是C啊,因为s3是个野指针啊

张世来4610484 发表于 2020-3-17 11:13:42

4goodworld 发表于 2020-3-16 20:01
我觉得你得站在strcat和strcpy的使用要求上看,先不考虑编译成功的其他因素,
题一,D的选项,*st1的长度 ...

题一,D定义的是两个指针,又不是数组,怎么就肯定溢出了呢

bin554385863 发表于 2020-3-17 11:32:37

张世来4610484 发表于 2020-3-17 11:11
第二题答案就是C啊,因为s3是个野指针啊

对的

4goodworld 发表于 2020-3-17 19:06:20

本帖最后由 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";
这两个是给定的

张世来4610484 发表于 2020-3-17 20:37:39

4goodworld 发表于 2020-3-17 19:06
用句流行的话:指针了不起吗?
对不起,指针不是你想为所欲为的,
举例,如果指针只是一个地址,为啥 ...

我刚才试了一下题二的B答案,发现也不行,是不是这种字符串的函数第一个不能用指针,尤其是已经复制的指针

reacx 发表于 2020-3-17 21:19:58

在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没定义

4goodworld 发表于 2020-3-17 21:24:24

张世来4610484 发表于 2020-3-17 20:37
我刚才试了一下题二的B答案,发现也不行,是不是这种字符串的函数第一个不能用指针,尤其是已经复制的指 ...

我说了:我觉得你得站在strcat和strcpy的使用要求上看,先不考虑编译成功的其他因素,
页: [1]
查看完整版本: 指针,字符串函数问题