sizeof和strlen
sizeof
- sizeof 为运算符,其结果是求对应参数的字节大小
strlen
- strlen 函数用来求字符串的长度(包含多少个字符)。 strlen() 函数从字符串的开头位置依次向后计数,直到遇见第一个\0 ,然后返回计时器的值。 最终统计的字符串长度不包括 \0 。
转义字符
- 以\或者\x开头,以\开头表示后跟八进制形式的编码值,以\x开头表示后跟十六进制形式的编码值。
- 对于转义字符来说,只能使用八进制或者十六进制。
- 转义字符的初衷是用于 ASCII 编码,所以它的取值范围有限。
- 八进制形式的转义字符最多后跟三个数字,也即\ddd,最大取值是\177,即表示一个字符。
- 十六进制形式的转义字符最多后跟两个数字,也即\xdd,最大取值是\x7f,即表示一个字符。
- strlen在进行测算时,只关注第一次出现’\0’处出现的位置,但是这里有一个陷阱"\0" == “\000”。
#include<stdio.h>
#include<string.h>
int main(){
char* a = "abc";
char b[] = "abc";
char c[3] = {'a','b','c'};
char d[5] = {'a','b','c'};
char e[10] = "abc\0abc";
char f[10] = "abc";
char spec[80] = "0123\0789";
printf("sizeof test = %d, %d, %d, %d, %d, %d\n", sizeof(a), sizeof(b), sizeof(c), sizeof(d), sizeof(e), sizeof(f));
printf("strlen test = %d, %d, %d, %d, %d, %d\n", strlen(a), strlen(b), strlen(c), strlen(d), strlen(e), strlen(f));
printf("sizeof_spec = %d, strlenof_spec = %d\n", sizeof(spec), strlen(spec));
return 0;
}
关键点—char spec[80] = “0123\0789”
- 解析
- 乍一看,\078算一位,结果不是应该是6么
- 查看上面的定义\后最多接三位八进制
- 八进制的最高是7最低是0