C语言关于字符串和字符数组的易混淆点

C语言关于字符串和字符数组的易混淆点

字符串和字符数组的区别

形式上:

字符串比字符数组多一个'\0'结尾的字符,这个字符占据一个字节的内存,但是它不占据字符串的大小

字符串一定是一个char型的数组,但是char型的数组可以是字符串可以是字符数组

初始化的方法上:

字符数组的初始化,就是将逐个字符赋值给数组中的各个元素

char arr[3]={'a',' ','c'};

如果字符数组的长度为3,但是你只初始化了两个字符,例如

char arr[3]={'a',' '};

那么剩下的区域就被自动填充为空字符'\0'

值得注意的是,这种情况初始化以后就成了字符串了

也就是说,末尾有'\0'就是字符串

其他的初始化方法:

用字符串表面量(字符串常量)初始化

char a[4]="hel";

这种情况初始化出来的一定是字符串

值得注意的是,这里数组的长度为4,是专门给'\0'留下了一个空间,要知道它也是需要空间的,如果不留空间就可能出现越界的错误

总而言之,二者初始化的区别,一方面在于是否数组满初始化(除了'\0'),如果满那么就是字符数组,如果不满那么系统自动填充了'\0'就变成字符串了;另一方面在于初始化是不是用了字符串表面量,如果用了那么一定时字符串,如果是单个字符的初始化那么就是字符数组

关于字符串

输出

%s输出的是一个字符串

并且%s在输出是遇到'\0'会自动结束输出

char a[3]="he";
printf("%s",a);

这种情况输出的就是he两个字符,'\0'不输出

%c输出的是单个字符

并且可以将'\0'输出出来

char a[3]="he";
for(int i=0;i<3;i++)
    printf("%c",a[i]);

puts函数的输出方式与

printf("%s",a);

是一样的,但是有一点不同,就是puts会将刚刚读入的回车字符也输出

输入

gets函数在打回车以后停止

值得注意的是,在scanf读取单个字符以后,需要用getchar();将缓冲区的回车字符清除掉,否则会影响下一步对gets的读取使用

总结

字符串就是比字符数组多了一个'\0'的位置,这个位置要留出来;

在初始化的过程中,用字符串常量初始化出来的默认为字符串;

输入和输出的时候要注意缓冲区的字符用getchar清除掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值