当前位置:网站首页>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;
}
运行结果为:
边栏推荐
- The official website of OpenMLDB is upgraded, and the mysterious contributor map will take you to advance quickly
- 第一章 Verilog语言和Vivado初步使用
- Tinker's self-introduction
- Node 踩坑之80端口被占用
- 解决AttributeError: ‘NoneType‘ object has no attribute ‘val‘ if left.val!=right.val:Line 17 问题
- vim 编辑器使用学习
- 2021年vscode终端设置为bash模式
- Tinker的自我介绍
- JS case exercise (classic case of teacher pink)
- Regular expression replacement for batch quick modification code
猜你喜欢
[Meetup] OpenMLDBxDolphinScheduler engineering and scheduling link link characteristics, building the end-to-end MLOps workflow
The whole process of Tinker access --- configuration
OpenMLDB Pulsar Connector:高效打通实时数据到特征工程
gerrit configure SSH Key and account, email information
活动预告 | 4月23日,多场OpenMLDB精彩分享来袭,不负周末好时光
开源之夏 2022 火热来袭 | 欢迎报名 OpenMLDB 社区项目~
将一个excel文件中多个sheet页“拆分“成多个“独立“excel文件
Invalid revision: 3.18.1-g262b901-dirty
C语言预处理
Jetpack使用异常问题集锦
随机推荐
Some formulas for system performance and concurrency
OpenMLDB + Jupyter Notebook:快速搭建机器学习应用
gerrit configure SSH Key and account, email information
星盟-pwn-babyheap
c语言-数据存储部分
C语言实现扫雷游戏
活动预告 | 4月23日,多场OpenMLDB精彩分享来袭,不负周末好时光
构建面向特征工程的数据生态 ——拥抱开源生态,OpenMLDB全面打通MLOps生态工具链
无效的修订:3.18.1-g262b901-dirty
OpenMLDB官网升级,神秘贡献者地图带你快速进阶
开源机器学习数据库OpenMLDB贡献者计划全面启动
Jetpack use exception problem collection
Vscode remote connection server terminal zsh+Oh-my-zsh + Powerlevel10 + Autosuggestions + Autojump + Syntax-highlighting
深度学习Matlab工具箱代码注释
Day 70
Day 81
PAT乙级刷题之路
贡献者任务第三期精彩来袭
helm安装
mysql basic summary