memset,memcpy,memcmp的原型函数

void * memset(void * s,int c,size_t count)
{
	char *xs = (char *) s;
	while (count--)
		*xs++ = c;
	return s;
}
int memcmp(const void * cs,const void * ct,size_t count)
{
	const unsigned char *su1, *su2;
	int res = 0;
	for( su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
		if ((res = *su1 - *su2) != 0)
			break;
	return res;
}

void * memcpy(void * dest,const void *src,size_t count)
{
	char *tmp = (char *) dest, *s = (char *) src;

	while (count--)
		*tmp++ = *s++;

	return dest;
}

 

 

 

memset是以字节为单位进行赋值的,所以当我们用大于255的数进行数组整体set赋值时,结果并不会是我们说需要的。

比如:
int array1[200];
int val=2;
memset(array1,val,200*sizeof(int));
这样的结果必然会出错!因为memset是以字节为单位进行赋值的,最后数组的结果可预知,但是完全错误……如果是对字符数组用这样的方式进行赋值的话就不会出错,因为字符只占一个字节,而int占四个字节……

 

memcpy也是以字节为单位进行比较,相等则返回0

 


 

 

 

 

 

 

 

 

 

你可能感兴趣的:(c)