猿问

c++中关于memcpy函数的问题,希望可以得到答案,谢谢 !!!!!

void *memcpy1(void *desc,const void * src,size_t size)
{
 if((desc == NULL) && (src == NULL))
 {
  return NULL;
 }
 unsigned char *desc1 = (unsigned char*)desc;
 unsigned char *src1 = (unsigned char*)src;
 while(size-- >0)
 {
  *desc1 = *src1;
  desc1++;
  src1++;
 }
 return desc;
}

int _tmain(int argc, _TCHAR* argv[])
{
 int dest[2] = {0};
 const char src[5] = "1234";
 memcpy1(dest,src,sizeof(src));
 printf((char *)dest);
 int m = -1;
 return 0;
}

上面这行代码可以运行

但是,为什么我把int dest[2] = {0};const char src[5] = "1234";这两行代码改成string *p="aaaa";和string *q="bbbbbb",就不行了,希望各位朋友可以解答得详细一点,脑子太蠢。。不好使

慕先生7590634
浏览 1529回答 2
2回答

onemoo

memcpy1函数的 desc 和 src 参数类型是指针,函数的行为就是从 src 所指的内存处复制size个字节到 dest 所指的内存。int dest[2] = {0} 和 const char src[5] 这两句声明了两个数组 dest 和 src,数组本身当然就是一段连续的内存。而且数组在用作右值时——传参数就是此种情况——会自动转为指向其首元素的指针,也就是说传入memcpy1的 dest 和 src 就是指向它们这两段内存的指针,完全符合函数的参数要求。 而且第三个参数是就是src数组的size,所以函数可以正确执行。你修改的代码是将 dest 和 src 的类型换成了string指针。 但你这两句定义p和q的语句不符合语法!以 string *p = "aaaa"; 为例: p是string指针。等号右侧的"aaaa"是字符串字面量,本身可以当作数组,所以在这里也会转为指针,但它是const char指针!  const char* 不能自动转换为 string*,所以无法作为p的初值!编译器即报错。q也是同理。

慕仙1118221

void函数不能有返回值吧
随时随地看视频慕课网APP
我要回答