1 字符串。
C语言的字符串是用字符数组表示的。约定以'\0'(ascii码0)作为结尾标记。
对于字符串类的字符数组,可以用string.h中的strcmp函数进行比较。
int strcmp(char *str1, char *str2)
其比较规则为:
a, 从左向右依次比较每个元素;
b, 如果出现str1的元素ascii码比较大,则返回1;如果出现str2元素ascii码比较大,则返回-1。如果相等,则继续。
c, 如果一直相等,直到遇到\0,这时检查是否均为\0,如果均为\0,那么返回0;
d, 如果str1到\0,而str2没到,返回-1否则返回1。
总结规则就是,如果str1比str2大,返回1;如果相等,返回0;如果str1小,返回-1。
2 不带\0结束的字符数组。
对于此类数组,没有库函数可供使用,只能自己写函数进行比较。规则可以仿照strcmp的规则。
由于没有\0作为结束,所以参数中必须传入每个数组的元素个数。
int char_array_cmp(char *s1, int l1, char *s2, int l2)
{
int lmin = l1>l2? l2:l1//较小长度者。
int i
for(i = 0i <lmini ++)
if(s1[i] >s2[i]) return 1
else if(s1[i] <s2[i]) return -1
//运行到这里,表示所有已判断元素均相等。
if(l1 == l2) return 0
if(l1 >l2) return 1
return -1//l1 <l2的情况。
}
一、没有char s[5]={"abc"}这种写法。除了char s[5]="abc",还有char s[5]={'a','b','c'}这两种写法。
两种写法的区别是 char s[5]="abc"在后门自动加一个0,习惯上称之为“字符串数组”;而char s[5]={'a','b','c'}不会再结尾加0,一个称之为“字符数组”。
二、s【0】是只能存放一个字符的存储空间,只能存放一个字符,不可能存放字符串abc 。
如有疑问请留言。
字符串输出在遇到'\0'字符前不会停char*
p
=
"123\0456"
printf(p)
//
输出123
p[3]
=
'&'
printf(p)
//
输出123&456
你代码里为什么那样是因为多位数组的存储空间是连续的
两句strcpy后arr数组是变这样
you.me.?
其中.代表空字符,?是未使用的空间