我的memcpy有什么问题?

dat*_*ili 1 c++

我编写了一个实现memcpy的函数

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
char *memcpy(char *dest,char *src,int n){

    char *ch=dest;
    while (n--)
        *ch++=*src++;
    return  dest;
}

int main(){

    char *src="georgia";
    int n=strlen(src);
    char *dest=new char[n];
    std::cout<<*memcpy(dest,src,n)<<std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但它只打印一个g.为什么?

zne*_*eak 13

因为你要打印一个字符.

std::cout<<*memcpy(dest,src,n)<<std::endl;
Run Code Online (Sandbox Code Playgroud)

这取消引用目标缓冲区(*memcpy),因此返回字符串的第一个字符(即g).你应该没问题:

std::cout << memcpy(dest, src, n) << std::endl;
Run Code Online (Sandbox Code Playgroud)

除此之外,它仍然无法工作:你需要在副本中包含字符串的终止NULL字符,但是strlen从字符串的长度中排除它; 所以你的缓冲区缺少1个字符.您需要添加1来n平衡它,一切都应该没问题.

int n = strlen(src) + 1;
Run Code Online (Sandbox Code Playgroud)