C++题目:char s1[]="holl";char s2[]={'h','o','l','l'};cout<<strcmp(s1,s2);为什么?
3个回答
展开全部
这是因为s1[]="holl";系统会在字符串后面赋给一个'\0';
而s2[]={'h','o','l','l'};只是字符数组而已元素4个,后面没'\0'
请看strcmp原型:
strcmp(
char*
s1,char*
s2)
{
for(;*s1==*s2
&&
*s1!=0;++s1,++s2);\\当s1=='\0'时跳出循环。
return
*s1-*s2;
\\而*s2是已经自加后的也就是'l'后面地址的一个值,
可能是1(不可预料的值);*s1为0所以strcmp()=-1(可能为-1);
}
而s2[]={'h','o','l','l'};只是字符数组而已元素4个,后面没'\0'
请看strcmp原型:
strcmp(
char*
s1,char*
s2)
{
for(;*s1==*s2
&&
*s1!=0;++s1,++s2);\\当s1=='\0'时跳出循环。
return
*s1-*s2;
\\而*s2是已经自加后的也就是'l'后面地址的一个值,
可能是1(不可预料的值);*s1为0所以strcmp()=-1(可能为-1);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先说strcmp
原型:extern
int
strcmp(char
*s1,char
*
s2);
用法:#include
<string.h>
功能:比较字符串s1和s2。
说明:
当s1<s2时,返回值<0
当s1=s2时,返回值=0
当s1>s2时,返回值>0
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:
"A"<"B"
"a">"A"
"computer">"compare"
s1有五个元素
holl
和结束符\0
s2有四个元素
holl
char
s1[]="holl";申请栈内存,是一个连续地址,s1有结尾符
然后char
s2[]={'h','o','l','l'};在s1后申请一个栈内存也是一个连续地址,但是s2没有结尾符,s1和s2地址是连续的,s2后是s1。当strcmp(s1,s2);时候,实际比较的是
'h','o','l','l','\0'和'h','o','l','l','h','o','l','l','\0'
s1<s2
所以返回
-1
原型:extern
int
strcmp(char
*s1,char
*
s2);
用法:#include
<string.h>
功能:比较字符串s1和s2。
说明:
当s1<s2时,返回值<0
当s1=s2时,返回值=0
当s1>s2时,返回值>0
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:
"A"<"B"
"a">"A"
"computer">"compare"
s1有五个元素
holl
和结束符\0
s2有四个元素
holl
char
s1[]="holl";申请栈内存,是一个连续地址,s1有结尾符
然后char
s2[]={'h','o','l','l'};在s1后申请一个栈内存也是一个连续地址,但是s2没有结尾符,s1和s2地址是连续的,s2后是s1。当strcmp(s1,s2);时候,实际比较的是
'h','o','l','l','\0'和'h','o','l','l','h','o','l','l','\0'
s1<s2
所以返回
-1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题很多,首先strcmp必须要你保证s1能容下两个字符串以及一个结尾符号,而且s2定义是个字符数组,不能用字符串操作函数,要用必须给s2加上结尾符
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询