字符串的两种初始赋值如下:
int main()
{
char str1[] = "absjdv"; //第一种
char str2[] = { 'a','b','s','j','d','v' }; //第二种
return 0;
}
第一种:" " 引起来的字符串
编译器会自动在末尾加上'\0','\0'是字符串的结束标志。在这种形式下,字符数组的实际长度要加1,因为'\0'也是一个字符。
![](https://img-blog.csdnimg.cn/img_convert/4678c3ec487e86f2dda78757642dc49b.png)
第二种:{ }里每个字符构成的字符串
这种形式编译器不会在数组的末尾加上一个'\0',如下图:
![](https://img-blog.csdnimg.cn/img_convert/2333446713785d0606e0abe4272a282f.png)
在打印时,由于字符串的结束标志是'\0',所以使用"%s"格式打印输出字符串时,遇到'\0'就会停止打印输出。
对于" "引起来的字符串,其末尾有字符串结束标志'\0',所以打印输出与输入一致。
但对于{}的字符串形式,就会出现如下图所示情况,原因是该形式的字符串并没有设定结束标志,而空间内存是连续的,在打印完六个字符后,并没有遇到'\0',就会持续打印输出后面内存里的东西,直到遇到'\0'才会停止,就出现了打印输出情况与想象不符的情况。
要解决这个问题很简单,只需要在最后加一个字符'\0'或者0,来标志字符串的结束,就可以正常打印输出啦!
int main()
{
char str1[] = "absjdv";
char str2[] = { 'a','b','s','j','d','v' };
char str3[] = { 'a','b','s','j','d','v' ,'\0'};
char str4[] = { 'a','b','s','j','d','v' ,0 };
printf("str1 = %s\n", str1);
printf("str2 = %s\n", str2);
printf("str3 = %s\n", str3);
printf("str4 = %s\n", str4);
return 0;
}
![](https://img-blog.csdnimg.cn/img_convert/5c90eb2451c751680125016290984375.png)
因为'\0'是字符串的结束标志,所以'\0'在哪,字符串就会停止在那,这个特点可以应用于字符串的截取。
int main()
{
char str1[] = "absjdv";
char str2[] = { 'a','b','s','j','d','v' ,'\0'};
char str3[] = "aghs\0svdh";
char str4[] = { 'a','b','s','\0','j','d','v' };
printf("str1 = %s\n", str1);
printf("str2 = %s\n", str2);
printf("str3 = %s\n", str3);
printf("str4 = %s\n", str4);
return 0;
}
![](https://img-blog.csdnimg.cn/img_convert/3ca5675e64a477ebb51afa5447768492.png)