当前位置:网站首页>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;
}运行结果为:
边栏推荐
- Vscode remote connection server terminal zsh+Oh-my-zsh + Powerlevel10 + Autosuggestions + Autojump + Syntax-highlighting
- 开源之夏 2022 火热来袭 | 欢迎报名 OpenMLDB 社区项目~
- Visual studio2019 configuration uses pthread
- Promise.race learning (judging the fastest execution of multiple promise objects)
- 【无标题】
- 【无标题】
- Day 82
- SearchGuard configuration
- 2021年vscode终端设置为bash模式
- mk文件介绍
猜你喜欢

JS事件循环机制

本地缓存cookie的使用

JVM tuning and finishing

heap2 (tcache attack,house of orange)

Day 81

The third phase of the contributor task is wonderful

自己动手写RISC-V的C编译器-02语法描述方法和递归下降解析

C-动态内存管理

Visual studio2019 配置使用pthread
![[Meetup] OpenMLDBxDolphinScheduler engineering and scheduling link link characteristics, building the end-to-end MLOps workflow](/img/d8/a367c26b51d9dbaf53bf4fe2a13917.png)
[Meetup] OpenMLDBxDolphinScheduler engineering and scheduling link link characteristics, building the end-to-end MLOps workflow
随机推荐
第四范式OpenMLDB优化创新论文被国际数据库顶会VLDB录用
星盟-pwn-babyfmt
mysql basic summary
厂商推送平台-华为接入
JS事件循环机制
Node stepping on the pit 80 port is occupied
一文看懂注解与反射
jdbc接口文档参考,jdbc接口方法逻辑探究
Visual studio2019 configuration uses pthread
详解程序执行过程
【无标题】
Jetpack's dataBinding
Asis2016 books null off by one
虚拟机更改IP地址
轻松理解进程与线程
解决npm warn config global `--global`, `--local` are deprecated. use `--location=global` instead.
【Meetup预告】OpenMLDB+OneFlow:链接特征工程到模型训练,加速机器学习模型开发
Interpretation of the paper: GAN and detection network multi-task/SOD-MTGAN: Small Object Detection via Multi-Task Generative Adversarial Network
gerrit configure SSH Key and account, email information
编译异常解决