void *memset(void *s, int ch, unsigned n);
来源:互联网 发布:电商美工的工作内容 编辑:程序博客网 时间:2024/06/07 00:30
函数原型 void *memset(void *s, int ch, unsigned n); 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。需要的头文件<memory.h> or <string.h> 程序例 #include <string.h> #include <stdio.h> #include <memory.h> int main(void) { 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; } 输出结果: Buffer before memset: Hello world Buffer after memset: ************ 编译平台: Microsoft Visual C++ 6.0 也不一定就是把内容全部设置为ch指定的ASCII值,而且该处的ch可为int或者其他类型,并不一定要是char类型。例如下面这样: int array[5] = {1,4,3,5,2}; for(int i = 0; i < 5; i++) cout<<array[i]<<" "; cout<<endl; memset(array,0,5*sizeof(int)); for(int k = 0; k < 5; k++) cout<<array[k]<<" "; cout<<endl; 输出的结果就是: 1 4 3 5 2 0 0 0 0 0 后面的表大小的参数是以字节为单位,所以,对于int或其他的就并不是都乘默认的1(字符型)了。而且不同的机器上int的大小也可能不同,所以最好用sizeof()。 要注意的是,memset是对字节进行操作, 所以上述程序如果改为 int array[5] = {1,4,3,5,2}; for(int i = 0; i < 5; i++) cout<<array[i]<<" "; cout<<endl; memset(array,1,5*sizeof(int));// 注意 这里与上面的程序不同 for(int k = 0; k < 5; k++) cout<<array[k]<<" "; cout<<endl; 输出的结果就是: 1 4 3 5 2 16843009 16843009 16843009 16843009 16843009 为什么呢? 因为memset是以字节为单位就是对array指向的内存的4个字节进行赋值,每个都用ASCII为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是00000001000000010000000100000001,就等于16843009,就完成了对一个INT元素的赋值了。 所以用memset对非字符型数组赋初值是不可取的! 例如有一个结构体Some x,可以这样清零: memset( &x, 0, sizeof(Some) ); 如果是一个结构体的数组Some x[10],可以这样: memset( x, 0, sizeof(Some)*10 );
- void *memset(void *s, int ch, unsigned n);
- memset(void *s,char ch unsigned n)函数解释
- void *memset(void *s,int c,size_t n)
- memset(void *s,int c,size_t n)函数详细说明
- memcpy(void*,void*,unsigned int),memset(void*,char,unsigned int),strcpy(char*,char*)
- 十三 void bzero(void *s, int n);
- void* memchr( void *pv, unsigned char ch, size_t size )
- extern void * memcpy(void *dest,void *src,unsigned int count)
- void f(n,s)
- memicmp(void *buf1, void *buf2, unsigned int count)
- void *memset(void *dest,int c,size_t count)
- void * memset ( void * ptr, int value, size_t num );
- void BubbleSort(int *a,int n)
- void salt(cv::Mat image, int n)
- error LNK2005: void * __cdecl operator new(unsigned int)......
- 生成伪随机数的函数int rand(void)和void srand(unsigned seed);
- error LNK2019: unresolved external symbol "void __cdecl sqlcxt(void * *,unsigned int *,struct sqlexd
- void (*func)(int)和void (*func)(void)
- 单相AC同步马达
- 【hdu2896】【AC自动机】病毒侵袭
- c语言结构体和联合体例题
- VS 2010 开发 ActiveX 交互篇一
- 消息推送【Android】Parse Push快速入门指南
- void *memset(void *s, int ch, unsigned n);
- spring+quartz集群下复杂应用
- 位图
- 【JMX】7. 连接MBean:Java代码
- MemCached 在Widnows环境下的Java之简单应用
- HP Mercury认证
- DirectFB 源码解读之初始化-5
- Android手机端调用webservice来获得手机归属地号码
- 发送HTML邮件 行颜色不显示的问题