以下用vs2022版本
先看几组代码
代码一、
#include <stdio.h>
int main()
{
char arr1[] = { 'a','b','c' };
char arr2[] = { "abc" };
printf("%s\n", arr1);
printf("%s\n", arr2);
return 0;
}
注意:这里[]里没有常量
接下来补充一点关于数组初始化的知识:
C语言对一维数组初始化有三种方式
第一种方式.对数组全部元素进行初始化,其形式如:
int a[10]={10.1,2.3,4.5,6,7,8,9};
第二种方式.对数组部分元素进行初始化,其形式如:
int a[10]={0,1};
这种方式只对数组中的前两个元素初始化为01.而后8个元素系统会自动全部初始化
为0。注意:\0的ASC||值为0。
若是字符数组,采用这种方式,如:
char c[10]={'T','h','e'};
在此对数组中的前三个元素初始化为 T,h, e,而后7个元素会自动全部初始化为0,可以看作空字符,即ASCII码为0的字符。
第三种方式,不定义数组的元素个数,对数组全部元素进行初始化,其形式如:
int a[ ] = {0,1,2,3,4,5,6,7,8,9} ;
这种方式没有定义数组的元素个数,系统会根据花括号中数据的个数决定数组元素的个数。
所以代码一中arr1为第三种方式只有三个字符,没有\0字符串结束标志
代码二、
#include <stdio.h>
int main()
{
char arr1[4] = { 'a','b','c' };
char arr2[] = { "abc" };
printf("%s\n", arr1);
printf("%s\n", arr2);
return 0;
}
代码二中arr1[]中为4,第四个元素初始化为0,即\0(’0‘才是字符0,值为48),
当然写成 char arr1[] = { 'a','b','c','\0' };结果一样
然后发现一个有趣的现象:
#include <stdio.h>
int main()
{
char arr1[4] = { 'a','b','c' };
char arr2[3] = { "abc" };
printf("%s\n", arr1);
printf("%s\n", arr2);
return 0;
}
这里"abc"中的\0没有读到