1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 char *s = "hello, world"; 6 printf("%d",strlen(s)); 7 return 0; 8 }
1 #include<stdio.h> 2 int strlen(char *s) 3 { 4 int n; 5 6 for(n = 0; *s != '0'; s++) 7 n++; 8 return n; 9 } 10 int main() 11 { 12 char array[] = "hello world"; 13 14 printf("%d",strlen(array)); 15 16 return 0; 17 }
这两段代码为什么结果会运行不同?
char *s = "hello, world"; // 这个叫以 '\0' 结束的字符串,这个可以用 '\0' 来得到字符串结束位置
char array[] = "hello world"; // 这个叫定长字符数组,这个不能用 '\0'得到字符串结束位置
2个值分别是多少
5,4?
字符串给的不一样,换成一样的。
C中字符串会以'\0'作为结束符;但是array是一个数组,紧接着array的内存单元的值与array没有任何关系,使用上文中的strlen方法得到的将是一个随机的值,而且这种方法会出现数组越界访问,建议不要使用。