字符串传给数组中出现的错误

字符串传给数组中出现的错误


今天在编成程序时候,把字符串赋值给数组后,用%s打印字符串出现了问题。废话不多说直接上代码:

int main()
{
	char arr[5] = "abcde";
	printf("%s\n", arr);
	return 0;
}

输出结果:
我们认为输出结果应该就是abcde,但是实际上是如下图:
在这里插入图片描述
先回顾下 %s 打印:它打印字符串只需要提供首字母地址,然后一直打印,直到遇见 \0就会停止打印
我们明明记得这样”abcde“ 后面应该添加 \0,为什么当打印到e的时候,为什么没有停止呢?
我研究了半天才明白abcde字符串实际上有有6个元素,而我们给数组定义的大小只有5个字符大小,所以没有把 \0 放入到数组当中,所以第6个元素不一定是 \0
在这里插入图片描述

int main()
{
	char arr[6] = "abcde";
	printf("%s\n", arr);
	return 0;
}

在这里插入图片描述
可以发现我们把数组大小调整为6个字符大小,\0被成功传入进数组,打印也恢复了正常。
我们调试一下验证:
在这里插入图片描述
我们发现arr2数组中arr2[5]不是 \0
总结:在使用数组时候一定要考虑好数组的大小,实在不知道数组的大小可以空着不填,直接把像输入的值放进去,让系统判断大小
例如:

int main()
{
	char arr1[] = "abcde";
	return 0;
}

在这里插入图片描述
这样也可以实现。

如果对你有帮助麻烦给个三连吧

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值