字符数组
字符数组:利用char定义的数组1
字符串:用""包括的字符序列,遇到\0就结束
判别字符数组是否为字符串,就看字符数组是否有’\0’,有’\0’就是字符串,否则不是
char str[]={‘a’,‘b’,‘c’,’\0’,‘e’}; 是字符串,字符串在\0处结束,所以输出只有abc
如果字符数组有0数字,没有定义完数组,剩余部分都是0,0也是’\0’,所以是字符串
0:数字0,’\0’,NULL,false
strcpy:不安全,数组越界,不使用安全版本的函数原因:1.有的编译器不支持;2.不好用
字符串,字符数组大小区别:
char str1[100] = “abcde”;
char str2[] = “abcde”;
char str3[] = “abcd\0e”;
char str4[] = “abcd\0e\n”;
printf("%d %d\n", sizeof(str1), strlen(str1));//100 5
printf("%d %d\n", sizeof(str2), strlen(str2));//6 5
printf("%d %d\n", sizeof(str3), strlen(str3));//7 4
printf("%d %d\n", sizeof(str4), strlen(str4));//8 4
字符串的复制,链接,求长度,比较大小
//将str1复制到str3
void Mystrcpy1(char* str1,char* str2)
{
while (*str1++ = *str2++);
}
void Mystrcpy2(char* str1, char* str2)
{
int i;
for (i = 0; str1[i] != '\0'; i++)
{
str1[i] = str2[i];
}
str1[i] = '\0';
}
//将str2内容链接到str1
void Mystrcat(char* str1, char* str2)
{
//找到str1的尾
int i;//str1长度
for (i = 0; str1[i] != '\0'; i++);
//复制str2到str1
int j;
for (j = 0; str2[j] != '\0'; j++)
{
str1[i] = str2[j];
i++;
}
str1[i] = '\0';
}
//求字符串长度,不包含\0
int Mystrlen(char* str)
{
int len;
for (len = 0; str[len] != '\0'; len++);
return len;
}
//字符串比较大小 str1>str2->大于0 str1<str2-> 小于0 str1=str2->等于0
int Mystrcmp(char* str1, char* str2)
{
for (int i = 0; str2[i]!='\0'||str1[i] != '\0'; i++)
{
if (str1[i] > str2[i])
{
return 1;
}
else if (str1[i] < str2[i])
{
return -1;
}
}
return 0;
}
void Show(char* str)
{
for (int i = 0; str[i] != '\0'; i++)
{
printf("%-2c", str[i]);
}
printf("\n");
}
int main()
{
char str1[100] = "abcd";
char str2[100] = "xyz";
char str3[100];
Mystrcpy1(str3,str1);
Show(str3);
printf("%d\n", Mystrcmp(str1, str2));
Mystrcat(str1, str2);
Show(str1);
printf("%d", Mystrlen(str1));
return 0;
}