字符串的相关操作与问题

字符串的相关操作

#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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值