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

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条)

报告相同问题?