详解C语言中的memset()函数
C语言memset()函数:将内存的前n个字节设置为特定的值 #include <string.h> memset() 函数用来将指定内存的前n个字节设置为特定的值,其原型为: void * memset( void * ptr,int value,size_t num ); 参数说明: 【函数说明】memset() 会将 ptr 所指的内存区域的前 num 个字节的值都设置为 value,然后返回指向 ptr 的指针。 memset() 可以将一段内存空间全部设置为特定的值,所以经常用来初始化字符数组。例如: char str[20]; memset(str,' ',sizeof(str)-1); 【返回值】返回指向 ptr 的指针。 注意:参数 value 虽声明为 int,但必须是 unsigned char,所以范围在0 到255 之间。 范例: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { // 不可以声明为 char *str = "http://c.biancheng.net"; char str[] = "http://c.biancheng.net"; memset(str,'-',7); puts(str); system("pause"); return EXIT_SUCCESS; } 执行结果: -------c.biancheng.net memmove 和 memcpy的区别 void *memcpy(void *dst,const void *src,size_t count); void *memmove(void *dst,size_t count); 他们的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。 第一种情况下,拷贝重叠的区域不会出现问题,内容均可以正确的被拷贝。 二者的c语言实现很简单,有兴趣的朋友可以去看看。在实际情况下,这两个函数都是用汇编实现的。 memmove在copy两个有重叠区域的内存时可以保证copy的正确,而memcopy就不行了,但memcopy比memmove的速度要快一些,如: memcpy()、 memmove()和memccpy() 这三个函数的功能均是将某个内存块复制到另一个内存块。前两个函数的区别在于它们处理内存区域重叠(overlapping)的方式不同。第三个函数的功能也是复制内存,但是如果遇到某个特定值时立即停止复制。 关于memmove的实现: void *mymemmove(void *dest,size_t n) { char temp[n]; int i; char *d = dest; const char *s = src; for (i = 0; i < n; i++) temp[i] = s[i]; for (i = 0; i < n; i++) d[i] = temp[i]; return dest; } 关于memcpy的实现: void *mymemcpy(void *dest,size_t n) { char *d = dest; const char *s = src; int *di; const int *si; int r = n % 4; while (r--) *d++ = *s++; di = (int *)d; si = (const int*)s; n /= 4; while (n--) *di++ = *si++; return dest; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |