C++ memset()函数和bzero()函数

1、memset函数说明

  memset()的函数, 它可以一字节一字节地把整个数组设置为一个指定的值。它把数组的起始地址作为其第一个参数,第二个参数是设置数组每个字节的值,第三个参数是数组的长度(字节数,不是元素个数)。memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度。

#include <string.h>
// 将s中的前n个字节用ch替换并且返回s,
void *memset(void *s,int ch,size_t n)

(1)清空数组和初始化

memset(buffer, 0, sizeof(buffer)) // 这个函数在socket很常用。
char a[100];
memset(a, '/0', sizeof(a));  // 初始化数组。

(2)清空一个结构体

// 在一段内存块中填充某一个给定的值,常用于较大的对结构体和数组的清零操作。
struct sample_struct
{
	char csName[16];
	int iSeq;
	int iType;
};
memset(&stTest, 0, sizeof(struct sample_struct));

// 如果是数组:
struct sample_struct TEST[10];
memset(TEST, 0, sizeof(struct sample_struct)*10);

2、类对象使用memset应注意的问题

  memset某个结构(或其它的数据类型)在C语言中是很常见的代码,其目的是对结构(或其它的数据类型)进行初始化,通常都是将变量置为NULL或者0。在C++中,针对类对象除了用构造函数初始化对象外,也可以使用memset来进行初始化操作(确实有这种情况,不得已而为之,请大家不要把鸡蛋砸过来!)。但是一定要注意以下所说的这种情况:如果类包含虚函数,则不能用 memset 来初始化类对象。

  因为每个包含虚函数的类对象都有一个指针指向虚函数表(V-Table),这个指针被用于解决运行时以及动态类型强制转换时虚函数的调用问题。当进行memset操作时,虚函数表里的指针置NULL,这样一来,只要调用虚函数,程序便崩溃。

3、bzero()函数简介

#include <string.h>
// bzero() 会将内存块(字符串)的前n个字节清零;
// s为内存(字符串)指针,n 为需要清零的字节数。
// 在网络编程中会经常用到。
void bzero(void *s, int n);
  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~青萍之末~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值