为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
慕先生7590634 2016-09-27 23:58:08
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",就不行了,希望各位朋友可以解答得详细一点,脑子太蠢。。不好使
查看完整描述

2 回答

?
onemoo

TA贡献883条经验 获得超454个赞

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也是同理。

查看完整回答
1 反对 回复 2016-09-28
?
慕仙1118221

TA贡献5条经验 获得超0个赞

void函数不能有返回值吧

查看完整回答
反对 回复 2016-09-29
  • 2 回答
  • 0 关注
  • 1502 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信