C++中的memset函数
来源:互联网 发布:linux命令用户组密码 编辑:程序博客网 时间:2024/04/27 21:59
函数介绍
void *memset(void *s, int ch, size_t n);
函数解释:将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法[1]。
memset置零 memset(&Address,0,sizeof(Address));
#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: ************
也不一定就是把内容全部设置为ch指定的ASCⅡ值,而且该处的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个字节进行赋值,每个都用ASCⅡ为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 *memset(void *s,int c,size_tn)
总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。
void *memset(void *s, int ch, size_t n);
函数解释:将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法[1]。
memset置零 memset(&Address,0,sizeof(Address));
#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: ************
也不一定就是把内容全部设置为ch指定的ASCⅡ值,而且该处的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个字节进行赋值,每个都用ASCⅡ为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 *memset(void *s,int c,size_tn)
总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。
0 0
- C语言中的memset()函数
- C语言中的memset函数
- c语言中的memset函数
- C语言中的memset函数
- c中的memset函数的用法?
- C语言中的memcpy()和memset()函数
- 【c/c++】memset()函数
- C++中的memset()函数
- C++中的memset函数
- C++中的memset函数
- C语言函数 memset
- C实现memset函数
- C/C++函数 memset
- c++--memset()函数
- C/C++中的memset
- C/C++中的memset
- C语言中的memset()
- 细谈C语言中的strcpy,strncpy,memcpy,memmove,memset函数
- Java线程池
- 软件开发常用英语词汇
- C语言中的数组越界
- 响应式Web设计
- D3D11_RASTERIZER_DESC,D3D11_FILL_MODE,D3D11_CULL_MODE,D3D11_VIEWPORT
- C++中的memset函数
- 交换类-----快排
- Sicily 1153 马的周游问题
- C++编译与链接(0).h与.cpp的定义与声明
- 浅谈MySQL中优化sql语句查询常用的30种方法
- c之孪生素数-----错误总结
- SendMessage与PostMessage的区别
- 思想有多远就能走多远
- 有没有愿意帮帮我......