如何自己实现字符串拷贝函数

一般写法:


char *my_strcpy(char *dst,const char *src)
{
	assert(dst != NULL);
	assert(src != NULL);
	char *ret = dst;
	while((* dst++ = * src++) != '\0') // 运算符优先级++高于*
		;
	return ret;
}

可以看到很简单,只需考虑三点。

1,判断源字符串和目的字符串是否为空

2,现将目的地址指针保存起来,方便输出

3,遍历原地址和目的地址,一个字符一个字符的复制,包括末尾的

 

但是上面的实现有问题,没有考虑到内存重合的情况。原地址src和目的地址dst所在内存有下面三种情况。

内存重叠​​​

对于1和3的情况,不影响。虽然1也有重叠,但是重叠部分不会破坏源字符串内容。

对于,第二种情况,可以按照从后往前拷贝源字符串内容到目的字符串的思路进行处理。

    void *do_copy(void *dst, const void *src, unsigned int count) {
        assert(dst);
        assert(src);
        void *ret = dst;
        if (dst <= src ||
            (char *)dst >= ((char *)src + count))  //源地址和目的地址不重叠,低字节向高字节拷贝
        {
            while (count--) {
                *(char *)dst = *(char *)src;
                dst = (char *)dst + 1;
                src = (char *)src + 1;
            }
        } else  //源地址和目的地址重叠,高字节向低字节拷贝
        {
            dst = (char *)dst + count - 1;
            src = (char *)src + count - 1;
            while (count--) {
                *(char *)dst = *(char *)src;
                dst = (char *)dst - 1;
                src = (char *)src - 1;
            }
        }
        return ret;
    }

    char *do_strcpy(char *dst, const char *src) {
        assert(dst != NULL);
        assert(src != NULL);
        char *ret = dst;
        do_copy(dst, src, strlen(src) + 1);
        return ret;
    }

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 我可以为您提供一个示例: char *strcpy(char *dest, const char *src) { int i; for (i=0; src[i]!='\0'; ++i) dest[i] = src[i]; dest[i] = '\0'; return dest; } ### 回答2: C语言中常用的字符串拷贝函数是strcpy()。这个函数可以将一个字符串的内容拷贝到另一个字符串中。 函数的原型为:char *strcpy(char *strDest, const char *strSrc) 其中,strDest代表目标字符串,也就是要将strSrc中的内容拷贝到的字符串;strSrc代表源字符串,即要被拷贝字符串。 在函数中,可以使用循环结构来逐个拷贝字符串的字符到目标字符串中,直到遇到源字符串的结束符'\0'。 下面是一个用C语言编写的字符串拷贝函数的示例: ```c #include <stdio.h> char *strcpy(char *strDest, const char *strSrc) { int i = 0; while (strSrc[i] != '\0') { strDest[i] = strSrc[i]; i++; } strDest[i] = '\0'; // 添加目标字符串的结束符 return strDest; } int main() { char src[100] = "Hello, World!"; char dest[100]; strcpy(dest, src); printf("拷贝后的字符串为:%s\n", dest); return 0; } ``` 在上面的示例程序中,首先定义一个字符串数组src,并初始化为"Hello, World!"。然后定义一个字符串数组dest,用于存放拷贝后的字符串。 接下来,在main函数中调用了strcpy函数,并将src和dest作为参数传入。拷贝完成后,可通过printf函数输出拷贝后的字符串。 以上就是一个利用C语言编写的字符串拷贝函数的示例。这个函数能够将源字符串的内容拷贝到目标字符串中,并能够正确处理字符串的结束符。 ### 回答3: 可以使用C语言编写一个字符串拷贝函数,可以将一个字符串的内容拷贝到另一个字符串中。以下是一个简单的示例代码: ```c #include <stdio.h> #include <string.h> // 字符串拷贝函数 void stringCopy(char* destination, const char* source) { int i = 0; while (source[i] != '\0') { destination[i] = source[i]; i++; } destination[i] = '\0'; } int main() { char str1[100]; char str2[100]; printf("请输入一个字符串:"); scanf("%s", str1); // 调用字符串拷贝函数 stringCopy(str2, str1); printf("拷贝后的字符串为:%s\n", str2); return 0; } ``` 在这个代码中,我们定义一个函数`stringCopy`,它接受两个参数:目标字符串`destination`和源字符串`source`。函数使用一个`while`循环逐一将源字符串的字符复制到目标字符串中,直到遇到字符串的结束符`\0`。最后,在目标字符串的末尾添加结束符`\0`,以确保字符串的完整性。 在`main`函数中,我们定义了两个字符数组`str1`和`str2`,分别用来存储用户输入的字符串拷贝后的字符串。我们首先通过`scanf`函数获取用户输入的字符串,并将其传递给`stringCopy`函数进行拷贝。然后,我们通过`printf`函数输出拷贝后的字符串。 这是一个简单的字符串拷贝函数实现,可以在C语言中灵活应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值