字符串大小问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 03:34:56
#include<iostream>
#include<string.h>
using namespace std;
void main()
{
char s1[]="hello";
char s2[]={'h','e','l','l','o'};
cout<<strcmp(s1,s2);
}
答案是负值,s2>s1,不知道为什么

s2最后没有结束符,这个仅仅相当于一个存有五个char型变量的字符数组,并不是C风格字符串,而strcmp是对字符串的比较,比较两个字符串第一个不一样的字符的ASCII码的大小,并且以空字符作为结尾,因为s2并没有结束符(空字符),再s2遍历结束后strcmp并没有返回,而是继续往下比较,具体返回值是根据s2所占内存空间的之后的一个字符决定的...

至于楼上所说的strlen(s2)=13 这个是不一定的,这个取决于在s2之后到底有几个字符才能到空字符'\0'这样strlen才能返回..

用俩个函数就知道了 strlen(s1) strlen(s2)
cout<<s2
<<endl
<<s1;
就可以看到自己想知道的结果 不过我也不知道为什么

#include<iostream>
#include<string.h>
using namespace std;
void main()
{
char s1[]="hello";
char s2[]={'h','e','l','l','o'};
cout<<strcmp(s1,s2)<<endl;
cout<<strlen(s1)<<endl<<strlen(s2);

}
运行的结果是-1 5 13 ,具体为什么不一样,或许是与字符串和字符数组的存储不一样把