你知道这些函数,在复制/追加字符串的时候会加上\0吗?

声明:代码里、0就是代表\0,只是不想转换成拼音而已。。。


#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <assert.h>
#include <string.h>
//1.模拟实现strlen
//size_t strlen(const char* str); 标准结构,记住返回值是无符号的//size_t my_strlen(const char* arr)
//{
//  assert(arr);
//  char* start = arr;
//  unsigned int count = 0;
//  while (*start++)
//  {
//      count++;
//
//  }
//  return count;
//}
//int main()
//{
//  char arr[] = "abc\0de";
//  unsigned int ret = my_strlen(arr);
//  printf("%d\n", ret);
//}//模拟实现strcpy  ,会拷贝、0
//char* strcpy(char* destination, const char* source);
//char* my_strcpy(char* destination, const char* source)
//{
// assert(destination&&source);
//  char* a = source;
//
//  //char* ret = source;
//
//  char* b = destination;
//  while (*b++ = *a++)
//  {
//      ;
//  }
//  //return ret;
//
//  return source;  //实现的功能和return ret是一样的
//}
//int main()
//{
//  char arr1[] = "xxxxxxxxx";
//  char arr2[] = "abc\0d";
//  printf("%s\n",my_strcpy(arr1, arr2));  //abc
//
//}
//int main()
//{
//  char arr1[50] = "abcdhhh";
//  char arr2[] = "e\0fg";
//  strcpy(arr1, arr2);
//  printf("%s\n", arr1);
//}//模拟实现strcat 不会把追加字符串的、0加上
//char* strcat(char* destination, const char* source);//char* my_strcat(char* destination, const char* source)
//{
//  assert(destination && source);
//  char* start = destination;
//  while (*start)
//  {
//      start++;
//  }
//  while(*start++ = *source++)
//  {
//      ;
//  }
//  return destination;
//}//int main()
//{
//  char arr1[50] = "abcdhhh";
//  char arr2[] = "efg";
//  printf("%s\n", my_strcat(arr1, arr2));
//}//int main()
//{
//  char arr1[50] = "abcdhhh";
//  char arr2[] = "e\0fg";
//  strcat(arr1, arr2);
//  printf("%s\n",arr1 );
//}//模拟实现strcmp
//int strcmp(const char* str1, const char* str2);//int my_strcmp(const char* str1, const char* str2)
//{
//  assert(str1 && str2);
//  while (*str1 == *str2)
//  {
//      if (*str1 == '\0')
//      {
//          return 0;
//      }
//      str1++; str2++;
//  }
//  return *str1 -* str2;
//}
//int main()
//{
//  char arr1[] = "abcde";
//  char arr2[] = "abcdf";
//  printf("%d\n", my_strcmp(arr1, arr2));
//}//模拟实现strncat  不会追加、0
//char* strncat(char* destination, const char* source, size_t num);//char* my_strncpy(char* destination, const char* source, unsigned int number)
//{
//  assert(destination && source);
//  char* strat = destination;
//  while(*strat)
//  {
//      strat++;
//  }
//  for (int i = 0; i < number; i++)
//  {
//      *strat = *source;
//  }
//  return destination;
//}
//int main()
//{
//  char arr1[50] = "abcd";
//  char arr2[] = "ef";
//  printf("%s\n", my_strncpy(arr1, arr2,1));
//}//int main()
//{
//  char arr1[50] = "abcd";
//  char arr2[] = "ef";
//  strncat(arr1, arr2, 1);
//}//模拟strncpy  不会复制、0
//char* strncpy(char* destination, const char* source, size_t num);//char* my_strncpy(char* destination, const char* source, int number)
//{
//  assert(destination && source);
//  char* start = destination;
//  int count = 1;
//  while (*source )
//  {
//      *start = *source;
//
//      if (count == number)
//          return destination;
//
//        count++;
//      start++; source++;
//  }
//  return destination;
//}
//int main()
//{
//  char arr1[] = "cbcd";
//  char arr2[] = "abcd";
//  printf("%s\n", my_strncpy(arr1, arr2, 3)); //abcd
//
//}//模拟strncat 不会、0
//char* strncat(char* destination, const char* source, size_t num);
//char* my_strncat(char* destination, const char* source, unsigned int number)
//{
//  assert(destination && source);
//  char* start = destination;
//  while (*start)
//  {
//      start++;
//  }
//  int count = 0;
//  while (*source)
//  {
//      *start = *source;
//      count++;
//      if (count == number)
//      {
//          return destination;
//      }
//      start++; source++;
//  }
//  return destination;
//
//}
//int main()
//{
//  char arr1[20] = "abcd";
//  char arr2[] = "efghi";
//  printf("%s\n", my_strncat(arr1, arr2, 3));
//}//int main()
//{
//  char arr1[20] = "abcd";
//  char arr2[] = "efghi";
//  strncat(arr1, arr2, 3);
//}//模拟   strncmp
//int strncmp(const char* str1, const char* str2, size_t num);//int my_strncmp(const char* str1, const char* str2, unsigned int number)
//{
//  int count = 1;
//  while (*str1 == *str2)
//  {
//      if (*str1 == '\0')
//      {
//          return 0;
//      }
//      str1++; str2++;
//      count++;
//      if (count == number)
//          return 0;
//  }
//  return *str1 - *str2;
//}
//int main()
//{
//  char arr1[] = "abcde";
//  char arr2[] = "abcdr";
//  printf("%d\n", my_strncmp(arr1, arr2, 4));
//}//模拟strstr
//const char* strstr(const char* str1, const char* str2);
//char* strstr(char* str1, const char* str2); C语言只支持这个
//char* my_strstr(char* str1, const char* str2)
//{
//  assert(str1 && str2);
//  char* p = str1;
//  char* a = NULL;
//  char* b = NULL;
//
//  while (*p)
//  {
//         a = p;
//       b = str2;
//      while (*a++ == *b)
//      {
//          b++;
//      }
//
//        if (*b == '\0')
//          return (char* )p;
//      if (*a == '\0')
//      {
//          return NULL;
//      }
//      p++;
//  }
//}
//int main()
//{
//  char arr1[] = "abcdabcdffff";
//  char arr2[] = "dab";
//  char* ret = my_strstr(arr1, arr2);
//  if (ret)
//      printf("找到了%s\n", ret);
//  else
//      printf("NO\n");
//}

其实只有strcpy会加上要拷贝字符串的\0,你发现了吗

【C语言】strlen,str(n)cmp,str(n)cpy,str(n)cat,strstr库函数的代码实现相关推荐

  1. C语言 strlen(str)和sizeof(arr)的区别

    C语言 strlen(str)和sizeof(arr)的区别 1. strlen() strlen(str):表示是运算符,而不是一个函数.sizeof返回的值表示的含义如下: 该函数实际完成的功能是 ...

  2. C语言strlen()函数用法

    C语言strlen()函数:返回字符串的长度 头文件:#include <string.h> strlen()函数用来计算字符串的长度,其原型为:unsigned int strlen ( ...

  3. 【str家族】如何使用处理字符和字符串的库函数

    本文收录于专栏:C语言进阶 关注作者,持续阅读作者的文章,学习更多知识! https://blog.csdn.net/weixin_53306029?spm=1001.2014.3001.5343 C ...

  4. 切割字符串长度php,C++_C语言中计算字符串长度与分割字符串的方法,C语言strlen()函数:返回字符串 - phpStudy...

    C语言中计算字符串长度与分割字符串的方法 C语言strlen()函数:返回字符串的长度头文件: #include strlen()函数用来计算字符串的长度,其原型为: unsigned int str ...

  5. matlab中str_,str编程中是啥意思 str在程序中什么意思

    在编程中char是什么意思? 在编程中char是申明一个字符型变量的语句.比如 char str 这样申明后,str就表示是一个长度为一个字节的字符变量.在C语言中一般表示是一个字符,但在C51中,也 ...

  6. C语言strlen函数详解

    strlen函数详解 一.strlen函数简介 1.函数原型 2.注意事项 二.strlen函数模拟实现 1.计数器方式 2.递归实现 3.指针-指针实现 一.strlen函数简介 1.函数原型 si ...

  7. c语言strlen作业,C语言 strlen()用法及代码示例

    strlen()函数计算给定字符串的长度.strlen()函数在string.h头文件中定义.它不计算空字符" \ 0". 用法: int strlen(const char *s ...

  8. c语言strlen函数的原型及用法

    原型 unsigned int strlen(const char *str); 用法 #include<stdio.h> #include<string.h>int main ...

  9. C语言strlen函数的模拟实现

    目录 使用计数方法实现strlen函数的模拟实现 使用递归的方式去实现 使用指针的方式去模拟实现strlen 使用计数方法实现strlen函数的模拟实现 在这里有一个assert函数这是断言,防止空指 ...

最新文章

  1. 61条面向对象设计的经验原则
  2. 2017年10月07日普及组 数列
  3. hadoop yarn集群HA安装及配置
  4. 字符集和编码规范:ASCII,Unicode和UTF-8, latin1,BIG5,GBK
  5. 【愚人节快乐】拥抱Bootstrap,FineUI新版效果超炫!
  6. 回顾云计算项目的得与失
  7. 关于MSDTC - 与基础事务管理器的通信失败 错误解决的小备忘
  8. 《富爸爸穷爸爸》第一课
  9. uni-app使用countdown插件实现倒计时
  10. problem solving automation
  11. 手把手教你使用NBS
  12. Linux系统日志rsyslogd
  13. 五子棋(C++面向对象实现)
  14. 联通服务器调试信号,云服务器 联通网络设置方法
  15. MJ上下拉刷新的使用方法 -2018.9.29
  16. history of program atan2(y,x)和pow(x,y)
  17. 消防隐患同比下降约60%,基于物联网大数据的智慧消防水系统远程监测方案
  18. 【Linux】bin结尾的安装包
  19. 一分钟带你读懂什么是堆?
  20. 启动springBoot,使用h2内嵌数据库,修改hibernate方言

热门文章

  1. SpringBoot使用Redis清除所有缓存
  2. exp: Linux xsel命令(剪切板操作指令)
  3. C/C++游戏开发:从零开始,用C++编写一个潜艇大战游戏!
  4. 因苹果会员比安卓贵,他把苹果告了
  5. springboot提交表单
  6. 继安卓进阶三部曲之后,刘望舒的最强作来了!
  7. 命令行下查看出口IP(你上网时暴露在公网上的IP地址)
  8. 怎么做一个微信自动回复的智能聊天机器人?
  9. 快学Big Data--Linux(八)
  10. YUV4:2:2与YUV4:2:0区别