这是因为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);}
先说strcmp原型:externintstrcmp(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和结束符\0s2有四个元素hollchars1[]="holl";申请栈内存,是一个连续地址,s1有结尾符然后chars2[]={'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