谁能帮我解释一个这个小短程序

tanlingyun 2008-09-18 10:28:11
这是一个C语言二级题目

#include <stdio.h>
#include <string.h>

int main()
{
char *s = "\ta\018bc";
printf("s的长度:%d\n", strlen(s));
for(int i = 0; i < strlen(s); i++)
{
printf("%c ", s[i]);
}
for(;*s != '\0'; s++)
printf("*");//这里为什么输出6个*,不懂
printf("\ns的长度:%d\n", strlen(s));
}

...全文
143 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
AbnormalSubmarine 2008-09-19
  • 打赏
  • 举报
回复
解释的够清楚了!
gy2hoh2 2008-09-19
  • 打赏
  • 举报
回复
帅~~~~各位都是牛人丫
Dolores 2008-09-19
  • 打赏
  • 举报
回复
我来给你解释一下你的char *s吧
char *s = "\ta\018bc";
1 \t--------被解析成转义字符Tab也就是制表符,
2 a-------字符a
3 \01---笑脸,可以查一下ASCII表, 1表示笑脸,并且解析转义字符时不是找到\0就结束的,
而是找到第一个有意义的ASCII字符也就是\01,如果只有\0则为结束符.
4 8---字符8
5 b--字符b
6 c-字符c.
所以已开始s字符串的长度为6.

解释完毕.
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 AbnormalSubmarine 的回复:]
解释的够清楚了!
[/Quote]
o(∩_∩)o...
mifeixq 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 tanlingyun 的帖子:]
这是一个C语言二级题目
C/C++ code#include<stdio.h>#include<string.h>intmain()
{char*s="\ta\018bc";
printf("s的长度:%d\n", strlen(s));for(inti=0; i<strlen(s); i++)
{
printf("%c", s[i]);
}for(;*s!='\0'; s++)
printf("*");//这里为什么输出6个*,不懂printf("\ns的长度:%d\n", strlen(s));
}
[/Quote]

-----------------------
s的长度是6,所以输出6个*
六个字符分别为
\t
a
\01
8
b
c
--------------------------
xianyuxiaoqiang 2008-09-19
  • 打赏
  • 举报
回复
因为\0的出现,编译器开始判断它是字符串结束符还是8进制的头。
如果\0后面没有1,2,3,4,5,6,7,0的序列,编译器将它解释为
字符串结束符。否则就以它后面的0-7序列作为8进制数解释。而此处
\01可以解释为8进制的1,8则不在0-7范围内,因此分开解释。
如果你来写编译器,你也会这么做的。
tanlingyun 2008-09-19
  • 打赏
  • 举报
回复
不是\ddd就表示八进制吗,为什么个\018它作为\01和8
xiansizhe 2008-09-19
  • 打赏
  • 举报
回复
for(;*s != '\0'; s++)
printf("*");//这里为什么输出6个*,不懂
/* s[0] 第一次,依次类推,到\0也就是字符串结束标记,终止6次 \t不是打印字符你看不到 */
insmile 2008-09-19
  • 打赏
  • 举报
回复
有点阴
gezichong 2008-09-18
  • 打赏
  • 举报
回复
s[2]=\01,,,这里是转义字符,,转换成8进制了。。

如果

char *s = "\ta\0912321";

则输出:
s的长度:2
a **
s的长度:0

s[2]='\0',,就结束了。
solar_yjidt 2008-09-18
  • 打赏
  • 举报
回复
楼上正解
e_sharp 2008-09-18
  • 打赏
  • 举报
回复
UP
lann64 2008-09-18
  • 打赏
  • 举报
回复
a[0]=\t
a[1]=a
a[2]=\01
a[3]=8
a[4]=b
a[5]=c
这不是6个吗?
xkyx_cn 2008-09-18
  • 打赏
  • 举报
回复
s的长度为6,\t表示一个转义字符,\01表示一个转义字符
所以"\ta\018bc"内共有6个字符
yangkunhenry 2008-09-18
  • 打赏
  • 举报
回复
因为s的长度是6

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧