字符串后面自动跟\0
运行结果:
个人认为将\0这个字符算入了size,计算机认为s这个char组共占7字节(当然包括\0)
直接开辟十个char空间,第十一个空间不为\0
运行结果:
因为一开始就定义了这个char组的长度,如果没定义到的,会自动补0,等价于\0,所以%s输出,也会输出定义了的有效值,而不会把所有0也输出
char arr1[] = "abc";
char arr2[] = {'a', 'b', 'c'};
char arr3[] = {'a', 'b', 'c', '\0'};
printf("%d\n", sizeof arr1); // 4
printf("%d\n", sizeof arr2); // ?
printf("%d\n", sizeof arr3); // ?
printf("%s\n", arr1);
printf("%s\n", arr2); // 没有\0
printf("%s\n", arr3); // 自己定义\0
运行结果:
搞一下:
char arr1[] = "abc\0abc";
printf("%d\n", sizeof arr1); // 4
printf("%s\n", arr1);
运行结果:
strlen()
尝试手写:
int my_strlen(char * s){
char * index = s;
int length = 0;
while(*index != 0){
length++;
index++;
}
return length;
}
int main() {
char arr1[] = "abc\0abc";
char arr2[3] = "abc";
printf("mystrlen arr1 = %d\n", my_strlen(arr1));
printf("mystrlen arr2 = %d\n", my_strlen(arr2));
}
运行结果: