字符数组用不同的方式初始化,结果可能不同
下面这段程序,把字符数组用不同的方式去初始化
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char arr[] = "abc";
printf("%d\n", strlen(arr));//3
printf("%d\n", sizeof(arr));//4
char* arr2 = "abc";
printf("%d\n", strlen(arr2));//3
printf("%d\n", sizeof(arr2));//4
char arr3[] = { 'a','b','c' };
printf("%d\n", strlen(arr3));//27
printf("%d\n", sizeof(arr3));//3
system("pause");
return 0;
}
strlen函数返回字符串的长度strlen,遇到字符串结束标志‘\0’结束。
用“abc”这种方式初始化会在字符串结束时自动加上’\0’,所以strlen返回3,sizeof返回4。
用{‘a’,’b’,’c’}这种方式初始化,不会在字符串结束时加上‘\0’,所以strlen一直找到‘\0’才结束,返回的27是一个随机值。这种方式初始化只有3个字符,sizeof返回3.
char arr[] = “abc” 和char* arr = “abc”的 区别是char* arr 指向的是常量字符串,一经初始化不可更改。而char arr[]这种方式初始化的字符串是可以更改的。