strlen计算字符串长度问题

gdyfj 2012-10-15 10:00:21
1、char *s = "\";
printf("%d",strlen(s));

这两行代码有错,提示:
error C2001: 常量中有换行符
error C2146: 语法错误 : 缺少“;”(在标识符“printf”的前面)
那意思字符串里面不能单独放\ ??

2、char *s = "\9";
printf("%d",strlen(s));

得到的结果是1,这个转义字符书上说的,对于\ddd(1-3个八进制数)或者\xhh(1-2个十六进制)代表转义。但是9既不是8进制,也没有说明是16进制。那为什么结果是1???


...全文
716 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
worini2011 2012-10-16
  • 打赏
  • 举报
回复
这么说吧,没有为什么,规定而已 只能按规矩来,没有为什么
[Quote=引用 8 楼 的回复:]

哥,麻烦你解释下2.第一个我明白。谢谢。
引用 5 楼 的回复:

1、没错\不能单独出现,你可以改为char *s = "\\";
2、\9表示十进制为9的ASCII字符,也可以表示为char *s = "\x9"。
[/Quote]
didijiji 2012-10-16
  • 打赏
  • 举报
回复
如果要输出字符'\'的话,应该这样写"\\"。
newtee 2012-10-16
  • 打赏
  • 举报
回复
规范点写吧 转义字符不要瞎用 语法都是有规则的
qt228186471 2012-10-15
  • 打赏
  • 举报
回复
char *s声明的为字符型指针,里面存放若干个字符,而作者的单个反斜杠没有任何意义,根本不能被识别为一个字符,因此有错。
linuxblack125125 2012-10-15
  • 打赏
  • 举报
回复
C语言中“\”是转义字符,后面一般跟一些特殊的字符,编译器遇到\时会把它后面的字符当做特殊字符处理,向\n代表换行符一样。
startservice 2012-10-15
  • 打赏
  • 举报
回复
转义字符不用十进制?
xiaoxiao8310 2012-10-15
  • 打赏
  • 举报
回复
第二个:
gcc编译时会提示警告:warning: unknown escape sequence '\9',会忽略转义字符。
若编译时加上-Werror的话就编译不过的。
gdyfj 2012-10-15
  • 打赏
  • 举报
回复
哥,麻烦你解释下2.第一个我明白。谢谢。
[Quote=引用 5 楼 的回复:]

1、没错\不能单独出现,你可以改为char *s = "\\";
2、\9表示十进制为9的ASCII字符,也可以表示为char *s = "\x9"。
[/Quote]
gdyfj 2012-10-15
  • 打赏
  • 举报
回复
这样做的结果是相当于在字符串中放了一个““”双引号。不是\。我知道要放\需要这样"\\",但是为什么C语言规定一个\就不行?
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:

第一个就是错的字符串
第二个:所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。


补充一句:
第一个char *s = "\""; 这样才对。编译器把你的语句当错误处理。
[/Quote]
armsword 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

1、请问为什么第一个字符串是错的,里面就不能放“\”,我知道这个字符串有错,编译器已经告诉我了,但是我想知道为什么不能单独放这个“\”?
2、我知道有些是用\加8进制或者16进制,但是这里的9既不是8机制,也没有写为\x9表示16进制,那为什么结果是1??
引用 1 楼 的回复:


第一个就是错的字符串
第二个:所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而……
[/Quote]

因为它被用来作为转义字符的用途了,就跟关键字一个意思。所以不能用。
图灵狗 2012-10-15
  • 打赏
  • 举报
回复
1、没错\不能单独出现,你可以改为char *s = "\\";
2、\9表示十进制为9的ASCII字符,也可以表示为char *s = "\x9"。
gdyfj 2012-10-15
  • 打赏
  • 举报
回复
1、请问为什么第一个字符串是错的,里面就不能放“\”,我知道这个字符串有错,编译器已经告诉我了,但是我想知道为什么不能单独放这个“\”?
2、我知道有些是用\加8进制或者16进制,但是这里的9既不是8机制,也没有写为\x9表示16进制,那为什么结果是1??
[Quote=引用 1 楼 的回复:]


第一个就是错的字符串
第二个:所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。
[/Quote]
xiaoxiao8310 2012-10-15
  • 打赏
  • 举报
回复
第一个:
char *s1 = "\\";
printf("s1=[%s] len=[%d]\n",s1,strlen(s1));
char *s2 = "\"";
printf("s2=[%s] len=[%d]\n",s2,strlen(s2));

结果:
s1=[\] len=[1]
s2=["] len=[1]
armsword 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

第一个就是错的字符串
第二个:所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。
[/Quote]

补充一句:
第一个char *s = "\""; 这样才对。编译器把你的语句当错误处理。
newtee 2012-10-15
  • 打赏
  • 举报
回复
第一个就是错的字符串
第二个:所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。

69,369

社区成员

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

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