我是靠谱客的博主 长情小天鹅,最近开发中收集的这篇文章主要介绍【C语言初阶】模拟实现strcpy函数和strlen函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

1.模拟实现strcpy

2.const修饰变量的具体情况 

3.模拟实现strlen


1.模拟实现strcpy

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[20] = "xxxxxxxxxx";
char arr2[] = "hello";
strcpy(arr1, arr2);//1.目标空间的起始位置 2.源空间的起始地址
printf("%s",arr1);
return 0;
}

模拟实现strcpy函数:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
void my_strcpy(char* dest, char* src)
{
while (*src != '')
{
*dest = *src;
dest++;
src++;
}
*dest = *src;
}
int main()
{
char arr1[20] = "xxxxxxxxxx";
char arr2[] = "hello";
my_strcpy(arr1, arr2);//1.目标空间的起始位置 2.源空间的起始地址
printf("%s", arr1);
return 0;
}

优化1:

void my_strcpy(char* dest,const char* src)//const作用:当dest跟src写反的时候会编译会出错
{
assert(src != NULL);//断言
//为真发生,为假就会报错,提示在哪一行的哪个文件出现问题
assert(dest != NULL);//断言
//把scr指向的内容拷贝放进dest指向的空间中
while (*dest++ = *src++)
{
;//hello的拷贝
}
}
int main()
{
char arr1[20] = "xxxxxxxxxx";
char arr2[] = "hello";
my_strcpy(arr1, arr2);//1.目标空间的起始位置 2.源空间的起始地址
printf("%s", arr1);
return 0;
}

 优化2:(有返回值)

//strcpy 这个库函数 其实返回的是目标空间的起始地址
char* my_strcpy(char* dest, const char* src)//const作用:当dest跟src写反的时候会编译会出错
{
assert(src != NULL);//断言
//为真发生,为假就会报错,提示在哪一行的哪个文件出现问题
assert(dest != NULL);//断言
//把scr指向的内容拷贝放进dest指向的空间中
char* ret = dest;//目标空间的起始地址
while (*dest++ = *src++)
{
;//hello的拷贝
}
return ret;//返回目标空间的起始地址
}
int main()
{
char arr1[20] = "xxxxxxxxxx";
char arr2[] = "hello";
//my_strcpy(arr1, arr2);//1.目标空间的起始位置 2.源空间的起始地址
printf("%sn", my_strcpy(arr1, arr2));//链式访问
return 0;
}

以上是标准的库函数的实现,这个库函数我们需要注意哪些点呢? 

1:hello是如何拷贝的,有无包含 ' '

2:断言是一个部分

3:指针+const是一个部分

4: 返回类型char*是一个部分

下面讲一下const修饰变量的具体情况 

2.const修饰变量的具体情况 

int main()
{
//1.
int num = 0;
int* p = &num;
*p = 20;
printf("%d",num);
return 0;
}
int main()
{
//2.const修饰变量,这个变量就被称为常变量,不能被修改,但是本质上还是变量
const int num = 10;
int* p = &num;
*p = 20;
printf("%dn", num);
return 0;
//输出的结果为20;
}
注意理解:
int main()
{
const int num = 10;
const int* p = &num;
int n = 30;
//const
修饰指针变量的时候
//const
如果放在*左边,修饰的是*p,表示指针指向的内容,是不能通过指针来改变的
//
但是指针变量本身是可以修改的
*p = 20;//报错
p = &n;
printf("%d", num);
return 0;
//编译不通过;
}
int main()
{
const int num = 0;
int* const p = &num;
int n = 10;
//const
修饰指针变量的时候
//const
如果放在*右边,修饰的是指针变量p,表示指针变量不能被改变
//
但是指针的内容,可以被改变;
*p = 20;
p = &n;//报错
printf("%d",num);
return 0;
}

3.模拟实现strlen

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
int my_strlen(const char* str)
{
assert(str != NULL);
int count = 0;
while (*str != '')
{
count++;
str++;
}
return count;
}
int main()
{
char arr[] = "bit";
int len = my_strlen(arr);
printf("%dn", len);
return 0;
}

最后

以上就是长情小天鹅为你收集整理的【C语言初阶】模拟实现strcpy函数和strlen函数的全部内容,希望文章能够帮你解决【C语言初阶】模拟实现strcpy函数和strlen函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部