[C语言]模拟实现strcpy
Posted Huang_ZhenSheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C语言]模拟实现strcpy相关的知识,希望对你有一定的参考价值。
目录
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 != '\\0')
{
*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("%s\\n", my_strcpy(arr1, arr2));//链式访问
return 0;
}
以上是标准的库函数的实现,这个库函数我们需要注意哪些点呢?
1:hello是如何拷贝的,有无包含 ' \\0 '
2:断言是一个部分
3:指针+const是一个部分
4: 返回类型char*是一个部分
下面讲一下const修饰变量的具体情况
2.const修饰变量的具体情况
int main()
{
//1.
int num = 0;
int* p = #
*p = 20;
printf("%d",num);
return 0;
}
int main()
{
//2.const修饰变量,这个变量就被称为常变量,不能被修改,但是本质上还是变量
const int num = 10;
int* p = #
*p = 20;
printf("%d\\n", num);
return 0;
//输出的结果为20;
}
注意理解:
int main()
{
const int num = 10;
const int* p = #
int n = 30;
//const 修饰指针变量的时候
//const 如果放在*左边,修饰的是*p,表示指针指向的内容,是不能通过指针来改变的
// 但是指针变量本身是可以修改的
*p = 20;//报错
p = &n;
printf("%d", num);
return 0;
//编译不通过;
}
int main()
{
const int num = 0;
int* const p = #
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 != '\\0')
{
count++;
str++;
}
return count;
}
int main()
{
char arr[] = "bit";
int len = my_strlen(arr);
printf("%d\\n", len);
return 0;
}
以上是关于[C语言]模拟实现strcpy的主要内容,如果未能解决你的问题,请参考以下文章
c语言 strcpy,strcat,strcmp函数模拟实现