今天下班的时候,和一位同事又谈起了字符串的问题,再次澄清如下:
1、 char *p = "ab/0"
strlen(p) = 2
char *p = "ab/0/0/0"
strlen(p) = 2
这是因为算字符串长度的时候,对于控制字符'/0'是不计算在内的
2、 char p1[] = "ab";
strlen(p1) = 2 sizeof(p1) = 3
char p2[] = "ab/0"
strlen(p2) = 2 szieof(p2) = 4
char p3[] = "ab/0/0"
strlen(p3) = 2 sizeof(p3) = 5
分析:计算字符串长度的时候,总是不会考虑/0;但是如果不指定数组的长度而由系统自动分配数组长度的时候,除了字符串中的'/0'需要分配空间外,系统
还要在最后分配一个'/0'作为字符串结束的标志。
3、 char *p1 = "///0";
strlen(p) = 1;
char *p2 = 0;
strlen(p2) = 3;
分析:p1中的前面两个//中的第一个为转义字符,和第二个共同组成一个字符/;后面是一个控制字符/0;
p2种的前面两个//中的第一个为转义字符,和第二个共同组成一个字符/;中间的第3、4个又组成一个字符/;再加上最后面的一个0,所以长度为3。