//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;
}
运行结果为: