C语言Strlen函数问题,求亲亲解释~~
问题描述:
char str[] = "ab\n\012\\\"";
printf("%d",strlen(str));
为啥打印的结果是6啊,百思不得其解,按道理strlen函数遇到 \0 就停止计数,而且最终统计的字符长度不包括 \0 为啥还是6
答
共6个字符。a,一个 b一个,\n一个,\012是转义字符,表示一个8进制的数字, '\012' 就是 0xa,也就是'\n'
。目前四个,\\是2个字符。要输出反斜杠“\”就是用转义符“\”,两个斜杠就是“\\”,总共6个
答
strlen()函数计算到'\0',你需要明白转义字符 \ 的用法。)
\ 后跟字母,n、v等
\ 后跟1至3个数字,如\0;\123等
\后跟x加1-2个数字
特殊的如 \; '; ''
答
strlen()函数从字符串的开头位置依次向后计数,直到遇见 \0,然后返回计数器的值,最终统计的字符长度不包括 ‘\0’
所以:
a 第一个
b 第二个
\n 第三个
\012 第四个
\\ 第五个
\" 第六个
所以这个程序输出的结果是 6
在这再理解以下转义字符吧,我觉得还是这个理解也没有透彻造成的原因
还有一个扩展题
#include <stdio.h>
main()
{
char st[] = "hello\0\t\\\"\012\x45";
printf("%d %d\n",strlen(st),sizeof(st));
}
这个题其实就是再比较strlen()和sizeof()的区别:
1)strlen() 遇见 \0 结束,并且不计算 \0
2)sizeof() 字符所有长度计算完结束,并且自动加一个 \0
所以这道题的答案是 5 ,12