请看这个关于strlen函数的问题

zhangbencheng 2012-10-28 04:13:30
#include<stdio.h>
void main()
{
printf("%d\n",strlen("ATS\n012\1\\"));
}
他的结果为9,为什么啊!????
...全文
226 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
一鸣惊人 2012-10-29
  • 打赏
  • 举报
回复
strlen 是计算字符串的长度 当人不算\0了
挣扎中前行 2012-10-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

ATS : 3
\n : 1
012: 3
\1: 1
\\: 1
3 + 1 + 3 + 1 + 1 = 9
其中\n, \1, \\各代表一个转义字符.
[/Quote]
++
newtee 2012-10-28
  • 打赏
  • 举报
回复
基础不扎实 建议把书本好好看看
疯狂的茶杯盖 2012-10-28
  • 打赏
  • 举报
回复
sizeof就要算\0了。strlen是字符个数计数,sizeof是存储空间计数。[Quote=引用 2 楼 的回复:]
转义字符:\n,\1(代表ASCII码为1的控制字符,即"标题开始"字符),\\(代表一个反斜杠字符‘\’)表示一个字符
[/Quote]
lihaicg 2012-10-28
  • 打赏
  • 举报
回复
用strlen的时候是遇到\0就结束了,\0是不算的。
size_t __cdecl strlen (
const char * str
)
{
const char *eos = str;

while( *eos++ ) ;

return( eos - str - 1 );
}
上面是strlen的实现的代码。看一下就知道了。
lxmuyu 2012-10-28
  • 打赏
  • 举报
回复
不算哪[Quote=引用 3 楼 的回复:]

想加个问题,'\0'不算吗?
[/Quote]
lihaicg 2012-10-28
  • 打赏
  • 举报
回复
因为'\1' 被查看成是一个八进制的1,所以总共就是9个字符。在转义中\xxx表示一个八进制的数,但是在后面不足三位的情况下,默认高位为0.
yingzijuntuan 2012-10-28
  • 打赏
  • 举报
回复
想加个问题,'\0'不算吗?
cooloyty 2012-10-28
  • 打赏
  • 举报
回复
转义字符:\n,\1(代表ASCII码为1的控制字符,即"标题开始"字符),\\(代表一个反斜杠字符‘\’)表示一个字符
JiMoKuangXiangQu 2012-10-28
  • 打赏
  • 举报
回复
ATS : 3
\n : 1
012: 3
\1: 1
\\: 1
3 + 1 + 3 + 1 + 1 = 9
其中\n, \1, \\各代表一个转义字符.

70,023

社区成员

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

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