关于数组清空的几种方法
一、使用bzero()函数
这是一个相对古老的方法,在men手册中是这样解释的:此函数已弃用,在新的程序中删除了bzero的规范。
这就说明在现在的代码中使用这个函数可能会无法正常使用甚至被编译器报错。
所以这个函数尽量少用!!!
NAME
bzero - write zero-valued bytes
SYNOPSIS
#include <strings.h> //在使用的时候一定得加上头文件
void bzero(void *s, size_t n);//形式参数列表
DESCRIPTION
The bzero() function sets the first n bytes of the area starting at s to zero (bytes con‐
taining '\0').
RETURN VALUE
None.
二、使用for循环给每一个元素赋值为0
for (int i = 0; i < count; i++)
{
arr[i]='0';
}
三、使用memset()函数
在们手册中关于memset()的介绍是这样的:
NAME
memset - fill memory with a constant byte
SYNOPSIS
#include <string.h> //在使用的时候需要加上头文件
void *memset(void *s, int c, size_t n);//形参列表
//将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。s 是 void* 型的指针变量,所以它可以为任何类型的数据进行初始化。
DESCRIPTION
The memset() function fills the first n bytes of the memory area pointed to by s with the
constant byte c. //函数的作用是:将s指向的内存区域的前n个字节填充为常量字节c。
RETURN VALUE
The memset() function returns a pointer to the memory area s. //函数的作用是:返回一个指向内存区域s的指针。
memset() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。它是直接操作内存空间,mem即“内存”(memory)的意思。
memset 一般使用“0”初始化内存单元,而且通常是给数组或结构体进行初始化。一般的变量如 char、int、float、double 等类型的变量直接初始化即可,没有必要用 memset。如果用 memset 的话反而显得麻烦。
当然,数组也可以直接进行初始化,但 memset 是对较大的数组或结构体进行清零初始化的最快方法,因为它是直接对内存进行操作的。memset 函数的第三个参数 n 的值一般用 sizeof() 获取,这样比较专业。
注意,如果是对指针变量所指向的内存单元进行清零初始化,那么一定要先对这个指针变量进行初始化,即一定要先让它指向某个有效的地址。而且用memset给指针变量如p所指向的内存单元进行初始化时,n 千万别写成 sizeof§,这是新手经常会犯的错误。因为 p 是指针变量,不管 p 指向什么类型的变量,sizeof§ 的值都是 4。
四、使用swab()函数
NAME
swab - swap adjacent bytes
SYNOPSIS
#define _XOPEN_SOURCE /* See feature_test_macros(7) */
#include <unistd.h> //不要忘记加上头文件哦
void swab(const void *from, void *to, ssize_t n);
DESCRIPTION
The swab() function copies n bytes from the array pointed to by from to the array pointed
to by to, exchanging adjacent even and odd bytes. This function is used to exchange data
between machines that have different low/high byte ordering.
//swab()函数从from所指向的数组复制n个字节到所指向的数组To by To,
//交换相邻的偶数和奇数字节。该函数用于交换数据在具有不同的低/高字节顺序的机器之间。
This function does nothing when n is negative. When n is positive and odd, it handles n-1
bytes as above, and does something unspecified with the last byte. (In other words, n
should be even.)
//当n为负时,这个函数什么都不做。当n为正且为奇数时,它处理n-1
//字节,并对最后一个字节执行一些未指定的操作。(换句话说,n应该是偶数。)
RETURN VALUE
The swab() function returns no value. //没有任何返回值·
笔者个人比较推荐使用memset()函数,因为一般来说我们代码中涉及到字符串的时候,都会加上 #include <string.h>头文件,我们在使用这个函数的时候就不容易出现遗忘添加头文件的情况。