一、memset()函数介绍
memset是将你指定范围的每一个字节设定为你指定的一个二进制值(在指定二进制时,以十进制的方式输入),在使用时要包含头文件#include<cstring>
。
原型`void* memset(void* ptr, int value, size_t num);`
· ptr:指向要设置数值的内存起始位置的指针。
· value:要设置的无符号字符值(通常是 unsigned char 类型的)。
· num:要设置的字节数。
二、如何使用memset
例如:想要将一个字符数组中的字符全设为a。
char c[10];
memset(c, 97, sizeof(c));
for (int i = 0; i < 10; ++i)
{
cout << c[i] << " ";
}
输出结果:
a a a a a a a a a a
97对应的二进制是0110 0001,memset将c的每一个字节都设为了0110 0001,而97(0110 0001)对应的字符为a,所以c中的元素输出出来都是a。
所以在设置字符串时,想要设置成什么字符,只要在vaule处填写对应ascll码值即可。
注意:在设置整形时一般只能设置成0或者-1。
例如:如果你想要用memset设置int的值为1,此时如果你写下下面这段代码
int a[10];
memset(a, 1, sizeof(a));
for (int i = 0; i < 10; ++i)
{
cout << a[i] << " ";
}
16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009
输出结果并不是想要的1而是16843009。
这是因为1对应的二进制是0000 0001 ,int占四个字节,每个字节都被填充为0000 0001,则数组中的每一个数被设置为0000 0001 0000 0001 0000 0001 0000 0001,这个数对应的十进制值为16843009。
所以memset在设置整形时只能设置为0或-1。
三、memset在二维数组中的用法
memset在设置二维数组时用法同样如此
int a[10][10];
memset(a, 0, sizeof(a));
for (int i = 0; i < 10; ++i)
{
for (int j = 0; j < 10; ++j)
{
cout << a[i][j] << " ";
}
cout << endl;
}
运行结果:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
总结
总结:在设置字符串时,想要设置成什么字符,只要在vaule处填写对应ascll码值,ptr出填写首地址,num填写想要设置的字节数即可。
但在设置整形时则一般只能设置为0或-1否则设置出来的值不可控。