脆弱的yXin 2020-12-24 17:41 采纳率: 100%
浏览 254
已采纳

C语言对字符数组初始化时,不加\0为什么会出现不同结果

问题来源于这道题,我一开始认为是相同的,后来实际操作发现确实不相同

我尝试了一下按照题目的做法

输出的时候不知道为什么ab后还有额外的字符

于是我尝试在ab后加了/0,结果就和我预想的一样了

为此我翻阅了高等教育出版社的C语言程序设计第三版(苏小红),书中这样说道

“一个字符串可以存于字符数组中,但一个字符数组中储存的并非一定是一个字符串,这要看它的最后一个元素是否为'\0',字符串数组是由字符构成的数组,仅当其最后一个元素是\0时才表示字符串”

所以想请教一下大家该怎么理解这句话呢,如果没有加\0,储存的又是什么呢。

在不加\0的情况下,为什么字符数组多了那么多字符呢,出现sizeof和strlen不等的原因又是什么

谢谢

  • 写回答

6条回答 默认 最新

  • 猫叔大鸭梨 2020-12-25 00:00
    关注

     

    int main() {
        char a1 = 0;//char a1 = 0; 这一行代码将x1后面的之后的内存赋值为0,0就相当于字符串休止符  strlen(x) = 2
    	char x1[] = {'a','b'};
    	cout << strlen(x1) << endl;
    	
    	return 0;
    }
    int main() {
        char a1 = 0;//char a1 = 0; 这一行代码将x1后面的之后的内存赋值为0,0就相当于字符串休止符  
    	char a2 = 1;//加上这一行之后 strlen(x) = 3
    	char x1[] = {'a','b'};
    	cout << strlen(x1) << endl;
    	
    	return 0;
    }

    希望这样你能看明白,可以考虑关注我。明天整理一下,写篇博客。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分