当前位置:网站首页>C语言-6月10日-my_strcpy函数的编写
C语言-6月10日-my_strcpy函数的编写
2022-08-11 05:30:00 【曾铎000811】
//my_strcpy_array(char *str);形参自定义,将str数组的内容拷贝一份出来。
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void my_strcpy_array(char *str,char *array,int len)//定义str数组和array数组,array数组存放原先的数据,设str为复制数组,len为数组元素个数
{
assert(str != NULL && array != NULL && len >= 0);//数组作为形参退化为指针,断言指针不为空且元素的个数大于等于0
for(int num = 0;num <= len -1;num++){
str[num] = array[num];//将array字符数组中的元素拷贝进str数组中
}
}
int main()
{
char array [] = "abcdef";//往原先array字符数组中填充数据
int len = sizeof(array) / sizeof(array[0]);//计算array的字符个数
char str[7];//定义str数组
my_strcpy_array(str,array,len);//调用函数进行执行
printf("str[] = ");
for(int i = 0;i<len -1;++i){
printf("%c ",str[i]);//对拷贝完成的str数组进行输出
}
return 0;
}如图为程序拷贝完成之后的运行结果:

输出完成
使用字符串头文件优化后的代码为:
//my_strcpy_array(char *str);形参自定义,将str数组的内容拷贝一份出来
#include<stdio.h>
#include<string.h>
#include<assert.h>
void my_strcpy_array(char *str,char *array)
{
assert(str != NULL && array != NULL);
int len = strlen(array);
for(int i = 0;i < len;i++){
str[i] = array[i];
}
}
int main()
{
char array[5] = "abcd";
char str[5];
my_strcpy_array(str,array);
printf("%s",str);
return 0;
}取消了长度的形参量,长度可以通过strlen库函数在拷贝函数里面得出并应用。
如图所示为程序运行结果:

输出完成
利用指针:
#include<stdio.h>
#include<iostream>
#include<assert.h>
void my_strcpy(int *ar,int *br,int begin_index,int m)//形参分别为:被复制的数组ar,新数组br,元素下标,数组元素个数
{
assert(ar != nullptr && br != nullptr && begin_index >= 0);
int *p = ar + begin_index;//p指针的初始位置是被复制数组ar的起始元素;
int *q = br + begin_index;//q指针的位置也是br数组的起始元素;
assert(p != nullptr && q != nullptr);
for(int i = 0;i < m;i++){
*q = *p;//将p指针对应的地址解引用后的元素赋值给q指针对应地址解引用的元素,循环;
q++;
p++;//每次赋值完之后,p指针和q指针的位置向后偏移一位,直到全部复制完成;
}
}
int main()
{
int m = 0;//定义整型值m用来存放被复制的数组中一共有几个元素
printf("Please input the number of array:\n");//输入元素的个数
scanf("%d",&m);
int ar[m];
printf("Please input these numbers.\n");//填充上面个数个元素
for(int i = 0;i < m;i++){
scanf("%d",&ar[i]);
}
int br[m];
my_strcpy(ar,br,0,m);//调用函数
printf("The array you copied br[] is:");
for(int i = 0;i < m;i++){
printf("%2d",br[i]);//输出
}
return 0;
}运行结果为:
边栏推荐
- OpenMLDB + Jupyter Notebook: Quickly Build Machine Learning Applications
- 手把手导入企业项目(快速完成本地项目配置)
- Day 78
- mysql basic summary
- buuctf hacknote
- 自己动手写RISC-V的C编译器-01实现加减法
- 自己动手写RISC-V的C编译器-02语法描述方法和递归下降解析
- Interpretation of the paper: Cross-Modality Fusion Transformer for Multispectral Object Detection
- OpenMLDB: Consistent production-level feature computing platform online and offline
- JS案例练习(pink老师经典案例)
猜你喜欢

一文看懂注解与反射

gerrit configure SSH Key and account, email information

js learning advanced (event senior pink teacher teaching notes)

IndexError: index 9 is out of bounds for axis 0 with size 9;数组下标溢出问题

C-自定义类型(结构体、枚举、联合)

Event Preview | On April 23, a number of wonderful sharing sessions of OpenMLDB will come, which will live up to the good time of the weekend

js learning advanced BOM part (pink teacher notes)

无效的修订:3.18.1-g262b901-dirty

第六届蓝帽杯 EscapeShellcode

USB in NRZI to encode the data
随机推荐
IO流和序列化与反序列化
IIC and SPI
C语言实现简易扫雷(附带源码)
JS案例练习(pink老师经典案例)
杀死进程-查看防火墙状态
127.0.0.1 已拒绝连接
The whole process of Tinker access --- configuration
Day 69
[Meetup] OpenMLDBxDolphinScheduler engineering and scheduling link link characteristics, building the end-to-end MLOps workflow
场景驱动的特征计算方式OpenMLDB,高效实现“现算先用”
Jetpack's dataBinding
开源之夏 2022 火热来袭 | 欢迎报名 OpenMLDB 社区项目~
Scene-driven feature calculation method OpenMLDB, efficient implementation of "calculate first use"
使用adb命令管理应用
[Meetup]OpenMLDBxDolphinScheduler 链接特征工程与调度环节,打造端到端MLOps工作流
OpenMLDB v0.5.0 发布 | 性能、成本、灵活性再攀高峰
深度学习Matlab工具箱代码注释
helm安装
自己动手写RISC-V的C编译器-01实现加减法
js learning advanced (event senior pink teacher teaching notes)