前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >C++ memset()函数和bzero()函数

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

作者头像
用户7886150
修改2021-02-16 19:57:46
修改2021-02-16 19:57:46
2.8K0
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: C++ memset()

文章目录

 1、memset函数说明(1)清空数组和初始化(2)清空一个结构体

   2、类对象使用memset应注意的问题3、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);

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档