C语言的字符串的内存函数

函数

  strlen函数,求字符串长度

  找到\0的时候停止,\0是不计入长度计算的。

#include<stdio.h>
int main()
{
  int len = strlen("abcdef");//找到\0就停止,\0是不计入的
  pritnf("%d",len);
  
  return 0;
}

但是如果是单个字符的情况。

#include<stdio.h>

int main( )

{
  char arr[ ] = {'a','b','c','d','e','f'};

  int len = strlen(arr);

  printf("%d",len);

  return 0;//这个时候,输出的数就是一个随机值。因为找不到 \0 所在的位置

求出这个字符串的长度有三种方法,1计数器    2递归 (不创建临时变量去求字符串长度)  3指针-指针(元素个数) 

这里介绍计数器的方法(count)

#include<stdio.h>
#include<assert.h>//断言的头文件
int my_strlen(const char* str)//这个只是求字符串的长度,不能改变这个字符串,所以要加一个const来给它固定
{
	int  count = 0;
	assert(str != NULL);//这里传递的是指针,就不能传递的是空指针,所以有一个不等于空指针的断言
	while (*str != 0)//相当于while(*str)是指str为真的意思
	{
		count++;
		str++;//开始指向下一个字符串里的数
	}
	return count;//把count传到main函数里面的len里
}
int main()
{
	int len = my_strlen("abcdef");
	printf("%d", len);
	return 0;
}

if(strlen("abc") - strlen("abcdef') > 0)

{
   printf("hehe");

}

else

{
   printf("haha");

}

return 0;//最后的结果是hehe, 因为strlen的返回类型是size_t是无符号的形式

strcpy函数(字符串拷贝)

#include<stdio.h>

#include<assert.h>
my_strcpy(char*dest,char*src)
{
   assert(dest != NULL);//这里用断言,如果出现括号中的情况会中终止程序,让程序更有规范性
   assert(Src  !=NULL);
   while(*dest++ = *scr++)//先解引用再++
{
   
//当拷贝到‘\0’的时候,把0赋值给了dest,while语句的判断条件变成了while(0) 为假,语句不再执行,刚刚好把'\0'的赋值形式也解决了
}
   
}
int main()
{
   char arr1[ ] = "abcdefghi";
   char arr2[ ] = "bit";
   my_strcpy(arr1,arr2);//把arr2的内容传到arr1当中
   printf("%s",arr10:
   return 0;
}

   

#include<stdio.h>
#include<assert.h>
my_strcpy(char*dest,char*src)
{
   assert(dest != NULL);//这里用断言,如果出现括号中的情况会中终止程序,让程序更有规范性
   assert(Src  !=NULL);
   while(*src != '\0')
{
   *dest = *src;//把第一个元素拷贝先
   *dest++;
   *src++;
}
*dest = *src;//这里拷贝的‘\0’因为拷贝要把src所有的都要拷贝过去,所以当src最后++的时候就是指向了‘\0’
   
   
}
int main()
{
   char arr1[ ] = "abcdefghi";
   char arr2[ ] = "bit";
   my_strcpy(arr1,arr2);//把arr2的内容传到arr1当中
   printf("%s",arr10:
   return 0;
}
   

可以再精简一下





#include<stdio.h>
#include<assert.h>
my_strcpy(char*dest,char*src)
{
   assert(dest != NULL);//这里用断言,如果出现括号中的情况会中终止程序,让程序更有规范性
   assert(Src  !=NULL);
   while(*dest++ = *scr++)//先解引用再++
{
    //当拷贝到‘\0’的时候,把0赋值给了dest,while语句的判断条件变成了while(0) 为假,语句不再执行
}
*dest = *src;//这里拷贝的‘\0’因为拷贝要把src所有的都要拷贝过去,所以当src最后++的时候就是指向了‘\0’
   
   
}
int main()
{
   char arr1[ ] = "abcdefghi";
   char arr2[ ] = "bit";
   my_strcpy(arr1,arr2);//把arr2的内容传到arr1当中
   printf("%s",arr10:
   return 0;
}
   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值