文章目录
1.使用bzero函数(Linux平台,Windows可用宏定义解决)
1.1 bzero函数详解
- 1.1.1 函数原型:
void bzero(void *str, int n);
- 1.1.2 所在头文件:string.h
- 1.1.3 功能:将字符串str的前n个字节置为0,一般来说n通常取sizeof(str),方便将整块空间直接清零(即初始化)。
- 1.1.4 返回值:无返回值
1.2 实例
- 1.2.1 将一个未初始化的数组清零(即初始化)
char str[10];
bzero( str, sizeof(str) );
运行结果
-1.2.2 将一个结构体清零(即初始化)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define bzero(a, b) memset(a, 0, b)
//博主是在windows平台下运行的,所以自己定义一下
//新建一个结构体
struct student {
char studentNumber[10];
int studentFraction;
char studentId[10];
};
void main() {
struct student *studentPointer;
studentPointer = (struct student*)malloc(sizeof(struct student));//在sizeof这儿,如果后面再乘以相应的数值,就能一次性初始化多个结构体
bzero(studentPointer, sizeof(struct student));
}
运行结果:
2. 使用memset函数(Windows)
2.1 memset函数详解
- 2.1.1 函数原型:
void *memset(void *str,int nur,size_t n);
- 2.1.2 所在头文件:string.h 或 memory.h
- 2.1.3 作用:将str中前n个字节替换为nur并返回str
- 2.1.4 优点:是对较大的结构体或数组进行清零操作的一种最快方法
- 2.1.4 注意事项:由于nur是int类型的,需要注意以下两点:
-
2.1.4.1 若str指向的地址是char类型的,nur的值可以是任意字符值;
-
2.1.4.2 若s指向的地址不是char类型,nur的值只能是-1或者0。
-
原因:因为-1和0转化成二进制后每一位都是一样的,设int型占4个字节,则-1=0XFFFFFFFF, 0=0X00000000。
-
2.2 实例
memset( str,0,sizeof(str) );
将上面的studentPointer指向的动态申请的内存初始化
memset( studentPointer,0,sizeof(struct student) );
运行结果
3. 使用calloc函数
3.1 函数详解
- 函数原型:
void* calloc(unsigned int num,unsigned int size)
- 所在头文件:
stdlib.h
- 动态申请内存函数之一,相当于用malloc函数申请并且初始化一样,calloc函数会将申请的内存全部初始化为0;
- 因此,可以直接用calloc函数,不用malloc函数,两者的区别就是一个会将申请的内存初始化,一个不会,大家按自己的需要来使用。
3.2 实例
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct node {
char name[10];
int number;
struct node *next;
};
void main() {
struct node *Herd;
Herd = (struct node *)calloc(1, sizeof(struct node));
system("pause");
}
运行结果
本人撰写博客纯粹为记录自己在学习过程的遇到的困难、问题的解决办法。如有错误,请大家不吝指教!谢谢!