以下四种方法是实现字符串拷贝函数的总结,最后的精华是只需要一行代码即可完成,这也是C语言的精炼灵活的所在。
测试源码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int tmy_strcpy1(void)
{
char src[] = "abcedfdgds";
char dst[100] = { 0 };
int i = 0;
for (i = 0; src[i] != '\0'; i++)
{
dst[i] = src[i];
}
dst[i] = 0;
printf("%s\n", dst);
printf("\n");
system("pause");
return 0;
}
void my_strcpy2(char *dst, char *src)
{
int i = 0;
for (i = 0; *(src + i) != '\0'; i++)
{
*(dst + i) = *(src + i); //dst[i] = src[i]
}
//dst[i] = 0;
*(dst + i) = 0;
}
void my_strcpy3(char *dst, char *src)
{
while (*src != 0)
{
*dst = *src;
dst++;
src++;
}
*dst = 0;
}
int my_strcpy4(char *dst, char *src)
{
if (dst == NULL || src == NULL)
{
return -1;
}
//定义临时的指针变量,避免指针不停地变化,最后处理的时候出现问题
char *to = dst;
char *from = src;
while (*to++ = *from++)
{
NULL;
}
printf("my_strcpy4: dst = %s\n", dst);
return 0;
}
int main(void)
{
char src[] = "abcedefg";
char dst[100] = { 0 };
int ret = 0;
ret = my_strcpy4(dst, src);
if (ret != 0)
{
printf("my_strcpy4 err:%d\n", ret);
return ret;
}
printf("%s\n", dst);
printf("\n");
system("pause");
return 0;
}
测试结果: