char s1[]=“hello” char s2[]={✀h✀,✀e✀,✀l✀,✀l✀,✀o✀};cout<<strcmp(s1,s2)

你好,请问这里为什么s2&gt;s1呀?
2024-11-23 08:41:26
推荐回答(4个)
回答1:

因为s2的第5个元素后的第6个元素没有受到控制,一般情况下不是0。而s1是长度为5的字符串,第6个元素是结束符0,所以通常s2的第6个元素比s1的第6个元素0大,所以s2>s1。

回答2:

对于你声明的s1和s2是两个字符数组
实际上s2是不一定大于s1的,因为你如果调用s2的话其实调用的是{'h','e','l','l','o'}中'h'的内存地址,s1则为"hello"中'h'的内存地址,s2>s1其实就是内存地址的大小比较,而不是申请得到的内存空间比较,
如果你每次输出都是s2大于s1的话也是可以解释的,因为s2是在s1申请之后申请的,内存地址的分配也是一直往后的,而且两个变量申请之间的时间时非常短的,系统可以腾出其他程序内存的几率较小,所以s2往往比s1大
不知道这么说你懂不懂==

回答3:

按照s1的定义,转换成s2这种写法是:char s1[]={ 'h','e','l','l','o',0 };
s2在定义赋值后并未构成完整的字符串,当使用strcmp函数时,会在s2后面寻找到一个0的单元才能算s2结束,因此大多数情况下s2的长度要比s1长,strcmp首先要比较长度,长度长的字符串大。

回答4:

因为S1含有6个字符,最后一个是'\0',而s2则只有5个