| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 553 人关注过本帖
标题:这几个题我可以排除错误,但我不知道错误选项为什么错了,哪位大神答疑一下 ...
只看楼主 加入收藏
cquwt
Rank: 1
等 级:新手上路
帖 子:41
专家分:2
注 册:2013-12-24
结帖率:69.23%
收藏
已结贴  问题点数:20 回复次数:6 
这几个题我可以排除错误,但我不知道错误选项为什么错了,哪位大神答疑一下?
1.若有以下说明语句,错误使用strcpy函数的是(c)
char *str1="we",str2[8],str3[8]="how",*str4,str5[3]="you";
A.strcpy(str2,str1)  B.strcpy(str3,str1)  C.strcpy(str4,str5)  D.strcpy(str5,str1)
2.若有以下说明和语句,则输出结果是(b)【尤其这个】
char *sp="\t\v\\\0will\n";
printf("%d",strlen(sp));
A.14 B.3 C.9 D.10
3.下面程序的输出结果为(a)【尤其这个】
程序代码:
#include<stdio.h>
#include<string.h>
void main()
{ char s1[6],s2[6],s3[6],s4[6];
       scanf("%s%s",s1,s2);
       gets(s3);
       gets(s4);
       puts(s1);puts(s2);
       puts(s3);puts(s4);           
}
输入:
123 321
456 654

A.123        B.123          C.123               D.123 321
  321          321            321                 456
               456 654        654               
  456 654      654
4.这个题解释原因。。。
程序代码:
#include<stdio.h>
void main()
{ void invert(char *perv,char *endp);
  char string[80]="change",*p2,*p1;
  p1=p2=string;
  while(*p2)p2++;
  p2--;
  invert(p1,p2);
  printf("\n%s",p1);
}
void invert(char *perv,char *endp)
{ static char temp;
   printf("%c",endp[0]);
  if(perv<endp)
  { temp=*perv;
    *perv=*endp;
    *endp=temp;
    invert(perv+1,endp-1);
  }
}

结果是:
egnn
egnahc

2014-06-10 23:22
funyh250
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:26
帖 子:290
专家分:1573
注 册:2013-12-25
收藏
得分:6 
1.  strcpy的第二个参数 null 终止的源字符串缓冲区

2.同样看看它的参数的说明  null 终止的字符串

3.gets 获取 stdin 流的一行

4.p1 p2都是字符串string的首地址 然后就是交换  注意的是invert中调用了自身 其中的参数作了叠加及递减

学习是大事   吃喝拉撒睡是小事   其他的那都不是事
2014-06-11 00:43
cquwt
Rank: 1
等 级:新手上路
帖 子:41
专家分:2
注 册:2013-12-24
收藏
得分:0 
1.懂了,\0就是NULL
2.还是不懂,感觉str5[3]="you";本身都是错的,算上NULL不是有4个吗
3.主要还是不懂s3,s4的gets 和 puts
4.你说的原理我知道,可是我推出来的不是答案,是这个:
egna
nge
2014-06-11 23:45
xsw07122269
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:34
专家分:183
注 册:2014-6-2
收藏
得分:4 
1,2就不说了。我也觉得str5[3]="you"本身就是错的。
3:scanf函数在输入字符串的时候是把空格和回车只当作字符分隔符号的,及输入了空格符号,相当于前面那个字符就结束了。而gets是把空格和回车当作一个字符来对待的。你在输入123 456+回车的时候,s1得到123 s2得到456,判断下一个字符是回车s2就在6后面家了个null,然后gets把回车当一个符号输入到s3,对gets来说,如果回车前有字符,回车相当于输入截至,如果只输入一个回车,则回车即是一个字符,然后再截止。
4:你仔细再推一下,结果不是你这样的。反正不多,一个一个推,和答案是一致的。
2014-06-12 04:15
cquwt
Rank: 1
等 级:新手上路
帖 子:41
专家分:2
注 册:2013-12-24
收藏
得分:0 
回复 4 楼 xsw07122269
1.如果把str5[3]="you"改成str5[5]="you"这时C其实也不对,为什么?
3. 意思是这样吗?
:输入123后,空格作为分隔符,s1得到了123,然后s2得到了456。再按回车,这时的回车充当两个功能,一个是作为s2结束的分隔符,另一个是作为s3的一个字符,用gets获取该字符后自动结束,然后剩下第二行的字符都是s4用gets获取。然后再截止。
   另外,s4[6]不是只能放6个字符吗(顺便问下这6个字符里包含\0吗?),456 654不是7个吗?这样也可以全部输出?
4.我推了好几遍,,,,得不到结果,是不是理解错了???
  假设有这个: char s[20]="change",*p[2]; p[0]=&s[2];p[1]=&s[4];puts(p[0]);puts(p[1]);这个得到的结果又是什么?
2014-06-12 13:13
xsw07122269
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:34
专家分:183
注 册:2014-6-2
收藏
得分:10 
1:只能用strcpy函数将一个字符串复制到另一个字符数组中去。
3:456 654应该说是8个字符,按道理是不行的,再输长一点就会报警,我也不知道原因,意思是能强行输出,但这样是不合法的。输入字符串肯定都是带\0的。貌似长一两个字符都能正常输出。
4:你这个语法就写错了&s[2]是元素的地址,赋给p[0]的是一个字符,而不是字符串,不能用puts来输出,应该改成putchar(*p[0]),这样输出的结果分别是a和g。
怎么会推错啊。。。按照语句一步一步来,你也可以单步调试啊。我推的就是结果。
p1刚开始指向第一个字符c,p2指向最后一个字符e。进入函数:
先输出e
然后第一个字符和最后一个字符互换吧.然后perv+1,endp-1就是把指向第二个字符的指针和倒数第二个字符的指针送到函数里去吧。
输出倒数第二个字符g
值互换
以此类推
输出倒数第三个字符n
值互换(注意这里换了后第三个字符变成了n,倒数第三个字符变成了a)
然后把指向第四个字符和指向倒数第四个字符的指针送到函数里去
输出倒数第四个字符n
然后不满足if条件,结束
最后主函数里面输出指针p1指向的内容egnahc
2014-06-13 02:14
cquwt
Rank: 1
等 级:新手上路
帖 子:41
专家分:2
注 册:2013-12-24
收藏
得分:0 
回复 6 楼 xsw07122269
秒懂。。我知道我推的时候哪错了...我把change写成2个让两个指针变量分别指向,,,
2014-06-14 22:40
快速回复:这几个题我可以排除错误,但我不知道错误选项为什么错了,哪位大神答疑 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017348 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved