读书人

memcpy函数的有关问题

发布时间: 2012-03-05 11:54:02 作者: rapoo

memcpy函数的问题
extern void *memcpy(void *dest, void *src, unsigned int count);

memcpy这个函数,如果我在循环里使用,那么dest和src的指针在每次使用后指向哪里?
譬如说我的count为10,那么dest和src的指针是不是在使用一次以后,指针分别指向他们的第十一个单位了?

还有就是这个函数的返回值是什么?

[解决办法]
memcpy这个函数,如果我在循环里使用,那么dest和src的指针在每次使用后指向哪里?
--
那得自己控制了,一般来说,向后移动count个单位
例如:
int len = 10;
for(int i = 0; i < 100; i++)
memcpy(dest + i * len, src + i * len, lem);

还有就是这个函数的返回值是什么?
返回dest,以便于链式操作
[解决办法]
指针还是都指在dest和src的开头?

指在 dest 的开头
[解决办法]
memcpy 不修改参数的指针位置,
只拷贝复制指向地址中的内容。

而且,
即使在 memcpy 中修改了 指针指向,
也不会对实参产生任何影像。
[解决办法]
楼上正解!还想说一句,楼主写的函数原型不是标准的写法,这是POSIX里的原型定义:
NAME
memcpy - copy bytes in memory
SYNOPSIS
#include <string.h>

void *memcpy(void *restrict s1, const void *restrict s2, size_t n);


DESCRIPTION
[CX] The functionality described on this reference page is aligned with the ISO C standard. Any conflict between the requirements described here and the ISO C standard is unintentional. This volume of IEEE Std 1003.1-2001 defers to the ISO C standard.
The memcpy() function shall copy n bytes from the object pointed to by s2 into the object pointed to by s1. If copying takes place between objects that overlap, the behavior is undefined.

RETURN VALUE
The memcpy() function shall return s1; no return value is reserved to indicate an error.

ERRORS
No errors are defined.


[解决办法]
指针位置都不变
[解决办法]
void *memcpy(void *dest,void *src, unsigned int count)
{
assert((dest!=NULL)&&(src!=NULL));
if(dest==src)
return src;
char* d=(char*)dest;
char* s=(char*)src;
while(count--> 0)
*d++=*s++;
return dest;
}
这是一个memcpy的源代码,可以看看,在函数里面生成临时指针,这样不会改变原始指针

读书人网 >C语言

热点推荐