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",就不行了,希望各位朋友可以解答得详细一点,脑子太蠢。。不好使 |
免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。
版权声明:作者保留权利,不代表天盟立场。
|
|
|
|
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也是同理。 |
|
|
|
|