我编写了一个实现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;
}
但它只打印一个g
。为什么呢?
答案 0 :(得分:13)
因为你要打印一个角色。
std::cout<<*memcpy(dest,src,n)<<std::endl;
取消引用目标缓冲区(*memcpy
),因此返回字符串的第一个字符(g
)。你应该没问题:
std::cout << memcpy(dest, src, n) << std::endl;
除此之外,它仍然无法工作:您需要在副本中包含字符串的终止NULL字符,但strlen
从字符串的长度中排除它;所以你的缓冲区缺少1个字符。你需要在n
加1来平衡它,一切都应该没问题。
int n = strlen(src) + 1;
答案 1 :(得分:3)
memcpy函数没有错,但你对结果有*操作。如果我们打破打印线,它就是......
char * result = memcpy(dest,src,n);
std::cout << *result << std::endl;
你真的想......
std::cout << memcpy(dest,src,n) << std::endl;
答案 2 :(得分:3)
您的memcpy()
会返回指向char
的指针。在行
std::cout<<*memcpy(dest,src,n)<<std::endl;
您取消引用指针(使用运算符*),以便有效地向流发送一个char
(返回值指向的那个)。
您的代码中存在错误。 strlen
返回字面“georgia”中的字符数,但不包含终止空字符。您应该将n
增加1,为dest
分配适当的存储空间,并复制终止空字符。
答案 3 :(得分:2)
您正在取消引用char *,这是一个char。这将是第一个角色,g。