A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 克莱斯勒 中级黑马   /  2015-9-6 21:31  /  1096 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

15.以下正确的程序段是(C )。-----------------
A. char s[20];                               B. char *s;
scanf("%s", &s);                             scanf("%s", s);
C. char s[20];                               D. char s[20], *t=s;
scanf("%s", &s[2]);                           scanf("%s", t[2]);

10 个回复

倒序浏览
A 数组名就代表数组第一个元素的地址,s本身是一个地址再加上&的符号就错了嘛
回复 使用道具 举报
cuifei 发表于 2015-9-6 21:33
A 数组名就代表数组第一个元素的地址,s本身是一个地址再加上&的符号就错了嘛 ...

明白了,那D选项为什么错?
回复 使用道具 举报
克莱斯勒 发表于 2015-9-6 21:34
明白了,那D选项为什么错?

看看%s,%p,%d,都打印的各是什么,前后要对应噢
回复 使用道具 举报
首先数组和字符串的定义搞清楚,这2个不是一个东西,a定义的事数组,所以你如果&s只是取数组首元素的地址
回复 使用道具 举报 0 1
d之所以错,这里你的t是一个指向字符数组的指针,这里的t[2]指的是字符数组中首元素地址加2.
回复 使用道具 举报
你这道题表示的是打印输出字符串和字符数组,你可以仔细看看如意大师的视频
回复 使用道具 举报
15.以下正确的程序段是(C )。-----------------
A. char s[20];                               B. char *s;
scanf("%s", &s);                             scanf("%s", s);
C. char s[20];                               D. char s[20], *t=s;
scanf("%s", &s[2]);                           scanf("%s", t[2]);

1.


第一题的语法没有错误,只是它的逻辑错了,它没有按照逻辑的意思把 得到的字符串存储到 s[20]整个字符串中.

2.D选项有两个错,首先   t[2]不能以 %s的形式输出   第二   scanf 中 的t[2]不是一个地址 而是一个值, 它应该以 &t[2]的形式出现
回复 使用道具 举报
赞同楼上。A中去掉scanf中的取地址符号&就可以了。
回复 使用道具 举报
同样的问题困扰,看到下面大神解释  瞬间清晰了。
回复 使用道具 举报
涨知识了,嘻嘻
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马