C语言memset()Review

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值