字符串的相关操作
#include<stdio.h>
#include<assert.h>
//比较字符串的大小
int Mystrcmp(const char *str1,const char *str2)
{
assert(str1!=NULL && str2!=NULL);
if(str1==NULL || str2==NULL)
{
return 0;
}
int tmp;//保存两个字符相减的差值
while((tmp=*str1-*str2)==0 && *str1!='\0')
{
str1++;
str2++;
}
return tmp;
}
//字符串的链接,将两个字符串内容相加
void Mystrcat(char *des,const char *src)
{
//参数检查
assert(des!=NULL && src!=NULL);
if(des==NULL || src==NULL)
{
return ;
}
//找尾巴
while(*des!='\0')
{
des++;
}
//复制
while(*des++=*src++);
return;
}
//求字符串的有效长度,不包括'\0'
int Mystrlen(const char *str)
{
assert(str != NULL);
if(str==NULL)
{
return 0;
}
int count=0;
while(*str!='\0')
{
count ++;
str++;
}
return count;
}
int main()
{
char str[10]="abcd";
char str1[10]="xyz";
printf("%d\n",Mystrlen(str));
Mystrcat(str,str1);
printf("%s\n",str);
printf("%d\n",Mystrcmp("abc","abc"));
printf("%d\n",Mystrcmp("abc","xyz"));
printf("%d\n",Mystrcmp("abc","abb"));
return 0;
}
字符串导致程序崩溃的原因
1.数组越界:str只分配了四个字节的空间,将str1与str2相加,需要八个字节的空间,打印时出现数组越界,导致程序崩溃
char str1[]="abcd";
char str2[]="1234";
strcat(str1,str2);
printf("%s\n",str1);
2.字符串常量不能修改
char *str1="abc";
char str2="xyz";
Mystrcat(str1,str2);
printf("%s\n",str1);