标签:
参考:http://www.cnblogs.com/lebronjames/archive/2010/07/04/1770987.html
1. 用法
void *memset(void *s, int ch, unsigned n);
使用时要声明头文件: #include <string.h>
2. 功能
将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数n决定。这个函数通常为新申请的内存做初始化工作,其返回值为指向S的指针。
3. 示例
1)将字符串的内容全部变为‘*’
#include <iostream> #include <string.h> #include <stdio.h> using namespace std; int main() { char buffer[]="hello world\n"; printf("Buffer before memset:%s\n",buffer); memset(buffer,‘*‘,strlen(buffer)); printf("Buffer after memset:%s\n",buffer); return 0; }
输出结果为:
2)对非字符型数组进行处理,一定要注意memset是对每个字节进行填充
#include <iostream> #include <string.h> #include <stdio.h> using namespace std; int main() { int num[5]={1,2,3,4,5}; for(int i=0;i<5;i++) printf("%d ",num[i]); printf("\n"); memset(num,0,5*sizeof(int)); for(int i=0;i<5;i++) printf("%d ",num[i]); printf("\n"); memset(num,1,5*sizeof(int)); for(int i=0;i<5;i++) printf("%d ",num[i]); printf("\n"); return 0; }
输出结果为:
由于memset是以字节为单位对数组进行填充,因此当填充值为0时,数组每个int元素都为0;当用1进行填充时,int变量一共4个字节,每个字节都用1的ASCII值(00000001)填充,合在一起就是00000001000000010000000100000001,等于16843009。
因此,如果用memset对非字符型数组进行初始化要非常谨慎,可以进行清0处理。
标签:
原文地址:http://www.cnblogs.com/summerkiki/p/5349541.html