- C语言中没有字符串这种数据类型,可以通过char的数组来替代;
- 字符串一定是一个char的数组,但char的数组未必是字符串;
- 数字0(和字符‘\0’等价)结尾的char数组就是一个字符串,但如果char数组没有以数字0结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的char的数组。
在字符数组中
#include<stdio.h>
int main()
{
char arr1[10] = { 'c', 'h', 'u', 'n' };
char arr2[4] = { 'c', 'h', 'u', 'n' };
printf("arr1 content:%s \n", arr1);
printf("arr2 content:%s \n", arr2);
printf("arr1 size %d \n", sizeof(arr1));
printf("arr2 size %d \n", sizeof(arr2));
for (int i = 0; i < 10; i++)
{
printf("arr1 content:%c \n", arr1[i]);
}
for (int i = 0; i < 10; i++)
{
printf("arr2 content:%c \n", arr2[i]);
}
return 0;
}
我们发现在以string格式在打印字符串数组的时候,
aar1 打印出来的结果是:chun
arr2 打印出来的结果是: chun烫烫烫烫chun
这是因为 %s
会接收字符串的结束标志\0
之前的所有的字符,而 \0
值ASCII中就是数字0,其中arr1中未赋值部分的数组会被编译器 为0
,而在arr2中因为只存储了4个字符,没有字符串的结束标志,导致识别不到字符串结束,而出现错误。
当我们在以char进行打印的时候,我们会发现,arr1中能够打印出10个字符,在后面几个未赋值的字符打印出来的均为空,arr2中能过正常打印出4个字符。
#include<stdio.h>
int main()
{
char arr1[10] = "chuneryi";
char arr2[9] = "chuneryi";
printf("arr1 content %s \n", arr1);
printf("arr1 size %d \n", sizeof(arr1));
printf("arr2 content %s \n", arr2);
printf("arr2 size %d \n", sizeof(arr2));
return 0;
}
将8个字符的字符串chuneryi
赋值给一个空间大小为8 的一个数组的时候我发现,提示了一个错误显示字符串占用9个空间而不是8个,这是因为在字符串的实际存储中,会在最后一位存储一个结束标志
。因此在控制台中能够正常的输出。
友情提示,欢迎批评指正
在以下博客中 发现了部分基础错误。
https://blog.csdn.net/weixin_34111790/article/details/92459629
在编译器中我发现,标出来的三个地方均报错
第一个箭头处,数组的长度应该是3
第二个箭头处,不符合字符串的赋值规则
第三个箭头处,结合我们上面的分析,数组的长度为4