上一篇介绍了字符串的初始化和输出,这一篇就介绍拷贝
总得来说C语言里的字符串就是个数组,用拷贝数组的方法来拷贝字符串没毛病。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//最简单的一位一位地拷贝
void my_strcpy(char *src,char *dst)
{
int i = 0;
for (i = 0; src[i] != 0; i++)
{
dst[i] = src[i];
}
dst[i] = 0;
}
//采用指针法的拷贝
void my_strcpy1(char *src, char *dst)
{
int i = 0;
for (i = 0; *(src + i) != 0; i++)
{
*(dst+i) = *(src+i);
}
*(dst+i) = 0;
}
//更简化的指针法拷贝
void my_strcpy2(char *src, char *dst)
{
while (*src != NULL)
{
*dst = *src;
dst++;
src++;
}
*dst = 0;
}
//还能再简化
void my_strcpy3(char *src, char *dst)
{
while (*src != NULL)
{
*dst++ = *src++;
}
*dst = 0;
}
//继续简化
void my_strcpy4(char *src, char *dst)
{
while ((*dst++ = *src++) != 0);
*dst = 0;
}
//简化到不行了
void my_strcpy5(char *src, char *dst)
{
//*dst = *src
//dst++ src++
//判断*dst是否为0,若为0跳出循环
while (*dst++ = *src++);
}
//这是一个正经的规范的函数的编写方法
//成功为0,失败非0
//1.判断形参指针是否为空
//2.最好不要之间使用形参
int my_strcpy6(char *src, char *dst)
{
//辅助变量把形参接过来
char *to = dst;
char *from = src;
if (dst == NULL || src == NULL)
{
return -1;
}
while (*dst++ = *src++);
printf("my_strcpy6: dst = %s\n",to);
return 0;
}
int main(void)
{
char src[] = "hello world!!";
char dst1[100] = { 0 };
char dst2[100] = { 0 };
char dst3[100] = { 0 };
char dst4[100] = { 0 };
char dst5[100] = { 0 };
char dst6[100] = { 0 };
char dst7[100] = { 0 };
my_strcpy(src, dst1);
printf("dst1 = %s \n",dst1);
my_strcpy1(src, dst2);
printf("dst2 = %s \n", dst2);
my_strcpy2(src, dst3);
printf("dst3 = %s \n", dst3);
my_strcpy3(src, dst4);
printf("dst4 = %s \n", dst4);
my_strcpy4(src, dst5);
printf("dst5 = %s \n", dst5);
my_strcpy5(src, dst6);
printf("dst6 = %s \n", dst6);
int ret = 0;
ret = my_strcpy6(src,dst7);
if (ret != 0)
{
printf("出错了\n");
return ret;
}
printf("dst7 = %s\n", dst7);
system("pause");
return 0;
}