【c语言】字符串函数的模拟实现(一)

简介: 【c语言】字符串函数的模拟实现(一)

strlen介绍及实现

strlen的作用是求字符串长度。因为字符串的结束标志是'\0',所以strlen统计的是'\0'之前出现的字符的个数。另外我们还需要注意的是strlen函数的返回类型是size_t类型,即无符号整形,那我们看一下下面这一段代码:

#include<stdio.h>
#include<string.h>

int main()
{
     if(strlen("abc") - strlen("abcdef") > 0)
         printf(">\n");
     else
         printf("<=\n");
     return 0;
}

看到这一段代码有人肯定会说3 - 6 < 0屏幕上会打印<=,事实上打印的是>。因为strlen返回的是无符号数,而两个无符号数相减的结果类型也应该是一个size_t类无符号数。所以两数相减的结果-3会被当成一个无符号数,则就大于0了。

综上所述,我们在模拟实现strlen函数时,必须注意以下几点:

  1. 要正确获取到字符串长度的话,那么字符串中必须有'\0'
  2. 要注意strlen的返回类型为size_t

方法一:

#include<stdio.h>

size_t my_strlen(const char* str)
{
     size_t count=0; //计数器,统计字符串长度
     assert(str != NULL);
     while(*str != '\0')
     {
          count++;
          str++;
     }
     return count;
}
int main()
{
     char arr1[]="abcdef";
     size_t len=my_strlen(arr1);
     return 0;
}

方法二:

指针 - 指针----->地址 - 地址 :得到的的是指针和指针之间的元素的个数:

#include<stdio.h>

size_t my_strlen(const char* str)
{
     assert(p != NULL);
     char* cur=str;
     while(*cur != '\0')
     {
          cur++;
     }
     return cur - str;
}
int main()
{
     char arr1[]="abcdef";
     size_t len=my_strlen(arr1);
     return 0;
}

方法三:

递归方式(不创建临时变量)

#include<stdio.h>

size_t my_strlen(const char* str)
{
     if(*str != '\0')
         return 1+my_strlen(str+1);
     else
         return 0;
}
int main()
{
     char arr1[]="abcdef";
     size_t len=my_strlen(arr1);
     return 0;
}


strcpy介绍及实现

strcpy函数就是将一个字符串拷贝到另一个字符串中的函数,在拷贝字符串时也会将字符串的结束标志'\0'也拷贝进去。这里的destination指的是目标字符串,即我们要拷贝字符串进去的字符串。

source指的是源字符串,即需要拷贝的字符串,因为这个源字符是不需要修改的,所以为了避免错误我们就用const修饰。

此函数的返回值是一个char*指针,指向了拷贝后的字符串。

通过上面的介绍我们在模拟实现strcpy函数时需要注意以下几点:

  1. 源字符串必须包含'\0',同时'\0'也会被拷贝到目标空间。
  2. 要保证目标空间足够大,能放下拷贝来的数据
  3. 保证目标空间可以修改
#include<stdio.h>
#include<assert.h> 

void my_strcpy(char* dest,const char* src)
{
    assert(dest && src);
    while(*dest++ = *src++)
    {
        ;
    }
}
int main()
{
    char arr1[]="abcdef";
    char arr2[20]={0};
    my_strcpy(arr1,arr2);
    return 0;
}


目录
相关文章
TU^
|
1月前
|
C语言
C语言内存函数和字符串函数模拟实现
C语言内存函数和字符串函数模拟实现
TU^
31 0
|
3天前
|
C语言
【c语言】字符串函数的模拟实现(二)
【c语言】字符串函数的模拟实现(二)
6 1
|
4天前
|
C语言
【C语言】:10大字符串函数
【C语言】:10大字符串函数
8 1
|
14天前
|
编译器 C语言 C++
【C语言基础】:字符函数和字符串函数-2
【C语言基础】:字符函数和字符串函数
|
14天前
|
C语言
【C语言基础】:字符串函数(二)
【C语言基础】:字符串函数(二)
|
14天前
|
C语言
【C语言基础】:字符函数和字符串函数-1
【C语言基础】:字符函数和字符串函数
|
23天前
|
C语言
【C语言】【字符串函数】【超详解】【上】!!!
【C语言】【字符串函数】【超详解】【上】!!!
13 3
|
23天前
|
安全 编译器 C语言
C语言学习记录——字符串相关函数及部分模拟(strcmp、strncmp、strncat、strncpy、strstr、strtok、strerror)
C语言学习记录——字符串相关函数及部分模拟(strcmp、strncmp、strncat、strncpy、strstr、strtok、strerror)
15 1
|
23天前
|
C语言
C语言学习记录——模拟字符串相关函数(strcpy、strlen、strcat)相关知识-const、typedef
C语言学习记录——模拟字符串相关函数(strcpy、strlen、strcat)相关知识-const、typedef
13 1
|
23天前
|
C语言
【C语言】【字符串函数】【超详解】【下】!!!
【C语言】【字符串函数】【超详解】【下】!!!
10 1