区别sizeof()和strlen()
文章目录
区别
strlen执行的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值。
sizeof是C语言的关键字,它以字节的形式给出了其操作数的存储大小,操作数可以是一个表达式或括在括号内的类型名,操作数的存储大小由操作数的类型决定。
字符串字面值
定义:用双引号(“”)括起来的0个或者多个字符组成的序列
存储:每个字符串尾自动加一个 ‘\0’ 作为字符串结束标志
对于用字符串字面值初始化的数组,sizeof()是引号里面定义总字符个数+1,strlen()是引号里面定义的总字符数。注意转义字符和后面的紧跟的字符算作一个。
|
|
特殊情况:
|
|
解析:
对于数组a,strlen()只计算到出现‘\0’为止,所以为3,而sizeof()不光计算初始化时人为输入的’\0’,还计算字符串尾自动加的 ‘\0’,所以为5
对于数组b,需要考虑转义序列:
当反斜线后面跟着的八进制数字(必须以0开头且包括0)超过3个(0以后的每一位数都要小于8,才能代表正确的八进制数),只有前3个数字与反斜线构成转义序列.
当反斜线后面为x,则代表十六进制数字,需要包含后面所有紧跟的数字 数组b中经过转化,实际为“12?56” 一共5个字符
特殊情况:‘\000’代表‘\0’,此时数组b变成“12\056”,此时strlen()为2,sizeof()为6,不管’\0’出现在哪里,字符串字面值最后都会自动补一个‘\0’
char s[]="12\00056";
printf("%d\n%d\n",strlen(s),sizeof(s)); //2,6
文章作者 Forz
上次更新 2017-06-23