黑马程序员技术交流社区

标题: 字符串问题 请写明详细推理过程 [打印本页]

作者: jiangenhao    时间: 2014-4-21 22:14
标题: 字符串问题 请写明详细推理过程
本帖最后由 jiangenhao 于 2014-4-25 15:36 编辑


  1. 15.下面程序段中,for循环的执行次数是()。
  2. char *s="\ta\018bc";
  3. for (;*s!='\0';s++) printf("*");
  4. A. 9                   B. 5            C.  6             D. 7
复制代码

作者: blz01003hm    时间: 2014-4-21 23:05
6次
第一次 \t
第二次 a
第三次 \01   //\0后跟数字就不是\0了
第四次 8
第五次 b
第六次 c
作者: m573555543    时间: 2014-4-22 08:01
c
\t a \01 8 b c \0
\t \01是转义字符,\0是赋值时自动加上的
作者: 桑托尔    时间: 2014-4-23 07:58
本帖最后由 桑托尔 于 2014-4-23 07:59 编辑

基本的楼上都已经解释全了,我仅来解释\018的意思。
就是"\0"后面如果加上数字的话,作用就不是字符串结束了,而是变成了转义字符
转义字符是干什么用的呢?意思是\0后面存的数是8进制的,而不再是10进制。
但是8进制的铁律是,数字必须是0-7之间,在本题中\0后面数字是18,8不在范围内,就没有把8算进去。\01就是以8进制形式存储一个1 ,然后又以10进制形式存储了个8
所以是   '\t'    'a'     '\01'     '8'     'b'     'c'

如何证明我的说法?
如果你把原题变成”\ta\017bc“ 答案将会变成 5
是因为一共有  '\t'    'a'     '\017‘     'b'     'c' 这5个字符
作者: jiangenhao    时间: 2014-4-25 15:35
明白了 谢谢大家的解答




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2