C和C++中memset()函数

想更方便地初始化吗?Just use memset()!!!

C和C++中memset()函数

Guderian出品

头文件

  • C: <string.h>
  • C++: <cstring>

声明

void *memset(void *str, int c, size_t n)

此处size_t变量类型等价于long unsigned int即无符号长整型,在32位机器上为32位,在64位机器为中64位。

注:32位机器指CPU通用寄存器的数据宽度为32位,也就是说CPU一次可以运行32bit数据

描述

复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。

参数

  • str ——指向要填充的代码块
  • c——要被设置的值该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
  • n——要被设置为该值的字节数。

返回值

返回一个指向存储区str的指针。

实例

对字符串操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <string.h>

int main ()
{
char str[50];

strcpy(str,"This is string.h library function");
puts(str);

memset(str,'$',7);
puts(str);

return(0);
}

编译并运行以上程序,得到结果如下:

1
2
This is string.h library function
$$$$$$$ string.h library function

初始化数组

注意:c接收参数的范围0-255 ,该函数只能取c后八位赋给你所指定的范围的每个字节

初始化为0

memset(arr, 0, sizeof(arr));

初始化为-1

memset(arr, -1, sizeof(arr));memset(arr, 0x7fffffff,sizeof(arr));

初始化为正无穷

  • 理论上的正无穷:memset(arr, 0x7f, sizeof(arr));
  • 实际使用的正无穷:memset(arr, 0x3f, sizeof(arr));

注:D(decimal)——十进制,B(binary)——二进制,O(octor)——八进制,H(hex)——十六进制

初始化为负无穷

  • 理论上的负无穷:memset(arr, 0x80, sizeof(arr));
  • 实际使用的负无穷:memset(arr, 0xbf, sizeof(arr));

注:此处要设置的值也可用二进制表示,如0xbf等价于0b10111111

本文标题:C和C++中memset()函数

文章作者:G-SS-Hacker

发布时间:2019年08月01日 - 17:15:02

最后更新:2020年02月19日 - 11:00:56

原始链接:https://G-SS-Hacker.github.io/C和C-中memset用法/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。