C语言memset()Review
-
需要的头文件
C中为<memory.h> 或 <string.h>
C++中为<cstring>
1. 声明
void *memset(void *str, int c, size_t n)
- str – 指向要填充的内存块。
- 若ptr指向char型地址,value可为任意字符值;
- 若ptr指向非char型,如int型地址,要想赋值正确;value的值只能是-1或0;
- 因为-1和0转化成二进制后每一位都是一样的,设int型占4个字节,则-1=0XFFFFFFFF, 0=0X00000000。
- c – 要被设置的值。
- 该值以 int 形式传递;
- 在填充内存块时是使用该值的无符号字符形式。
- n – 要被设置为该值的字节数。
2. 例子
- 例子1,char类型地址。
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] = "almost every programmer should know memset!";
memset (str,'-',6);
puts (str);
return 0;
}
------ every programmer should know memset!
- 例子2,int类型地址。
- 正确的赋值。
#include <stdio.h>
#include <string.h>
int main ()
{
int buf[50];
memset(buf, 0, sizeof(buf));
for (int i = 0; i < 50; ++i){
printf("%d", buf[i]);
}
printf("\n");
return 0;
}
00000000000000000000000000000000000000000000000000
#include <stdio.h>
#include <string.h>
int main ()
{
int buf[50];
memset(buf, -1, sizeof(buf));
for (int i = 0; i < 50; ++i){
printf("%d", buf[i]);
}
printf("\n");
return 0;
}
-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1
- 例子3,int类型地址。
- 错误的赋值。
#include <stdio.h>
#include <string.h>
int main ()
{
int buf[50];
memset(buf, 1, sizeof(buf));
for (int i = 0; i < 50; ++i){
printf("%d ", buf[i]);
}
printf("\n");
return 0;
}
[Running] cd "/Users/apple/Desktop/" && g++ t.cpp -o t && "/Users/apple/Desktop/"t 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 [Done] exited with code=0 in 0.134 seconds