我编写了一个实现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)