void *memset(void *s, int ch, unsigned n);
2013-03-21 16:15
183 查看
函数原型 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 );
相关文章推荐
- memset(void *s,char ch unsigned n)函数解释
- 多线程问题cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *
- void *memset(void *dest,int c,size_t count)
- void指针和memset实现
- declaration is incompatible with "__nounwind __interwork __softfp unsigned long __get_PSP(void)" IAR 编译报故障
- C++语言复习七 数组的memset初始化 void指针的用法 举例
- (C)理解 #define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))
- void *memset(void *s,int c,size_t n)
- 使用GCC4.8 编译android内核提示warning: argument to ‘sizeof’ in ‘void* memset(void*, int, size_t)’
- error LNK2019: unresolved external symbol "void __cdecl sqlcxt(void * *,unsigned int *,struct sqlexd
- static void PingHandler (uchar * pkt, unsigned dest, unsigned src, unsigned len)
- 解决 declaration is incompatible with "__interwork __softfp unsigned long __get_PSP(void)" 报错
- memset(void *s,int c,size_t n)函数详细说明
- error C2664: 'CreateThread' : cannot convert parameter 3 from 'void (int)' to 'unsigned long (__stdcall *)(void *)'
- 生成伪随机数的函数int rand(void)和void srand(unsigned seed);
- typedef unsigned long (__stdcall *THREADFUNC)(void *)
- void*与void;strlen与sizeof;memset
- 1>nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned __int64)" (??2@YAPEA
- memset用法详解 1。void *memset(void *s,int c,size_t n) 总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。 2。例子 #include
- malloc函数 编辑词条 B 添加义项 ? extern void *malloc(unsigned int num_bytes) 30 本词条 正文无图片, 无基本信息模块, 正文缺少必要目录