1.用数组输出字符串
1.1输出字符串
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "abcdefhh";//这里有隐藏\0
printf("%s\n",arr1);
}
这是输出结果:
我们再算一下arr1的长度
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "abcdefhh";//这里有隐藏\0
printf("%s\n",arr1);
printf("%d\n",strlen(arr1));
}
这是输出结果:
由图上看出输出的结果为8,我们刚好也是有八个字符
1.2另一种方式输出字符串
#include <stdio.h>
#include <string.h>
int main()
{
char arr2[] = {'a','b','c','d','e','f','h','h'};//这里没有'\0',然后就会继续输出上面的内容
printf("%s\n",arr2);
printf("%d\n",strlen(arr2));
}
我们发现另一种表示方法当中,输出的结果变多了一个这个东西'€',那为什么会出现这个东西呢?
我们将上面两个arr1和arr2的代码放在一起,如下:
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "abcdefhh";//这里有隐藏\0
char arr2[] = {'a','b','c','d','e','f','h','h'};//这里没有'\0',然后就会继续输出上面的内容
printf("%s\n",arr1);
printf("%s\n",arr2);
printf("%d\n",strlen(arr1));
printf("%d\n",strlen(arr2));
//printf("\a");
}
可以看到,第一个arr1计算的长度是8,第二个arr2计算的长度竟然是16,为什么呢?因为第一个arr1[] = " "这样子书写,""里面是隐藏了一个'\0',也就是结束标志符,但是第二个那样子写却没有结束标志符,导致strlen算完了arr2里面的字符,又接着把arr1里面的也算完了(arr1和arr2的地址紧紧挨着),然后到arr1最末尾'\0'才结束,所以导致arr2长度变成了原来的两倍
1.3改进一下
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "abcdefhh";//这里有隐藏\0
char arr2[] = {'a','b','c','d','e','f','h','h','\0'};//这里没有'\0',然后就会继续输出上面的内容
printf("%s\n",arr1);
printf("%s\n",arr2);
printf("%d\n",strlen(arr1));
printf("%d\n",strlen(arr2));
//printf("\a");
}
我们在arr2后面加个'\0',发现结果就和我们预期的相同了,因此我们要注意,像arr2那样子写的时候要记得加上结束标志符,不然就会导致一些不必要的麻烦!
非常感谢各位老爷能看到这里!如有错误,请在评论区指出,谢谢大家!