正如我之前多次说过的,定义变量时必须进行初始化。 特别是像数组和结构体这样消耗内存的数据结构。 使用数组时,由于未初始化,经常会发生“打孔器”这样的野值,俗称“乱码”。

memset的每种变量都有各自的初始化方法。 memset ()函数可以说是初始化内存的“万能函数”,通常用于初始化新申请的内存。 通过直接操作内存空间,mem是“内存”(memory )的意思。 函数的原型如下:

# include string.h

void*memset(void*s,int c,unsigned long n );

的功能是用“整数”c替换指针变量s指向的前n个字节的存储单元。 请注意,c是int型。 s是void*型指针变量,因此可以初始化所有类型的数据。

memset ) )的作用是在内存块的一部分中输入特定的值。 由于只能输入一个值,因此此函数的初始化是原始初始化,不能以编程方式将变量初始化为所需数据。 用memset初始化后,用后面的程序将其存储器空间中存储必要的数据。

memset通常使用“0”初始化存储器单元,通常初始化数组或结构。 一般的变量,例如char、int、float、double等类型的变量直接初始化即可,不需要使用memset。 使用memset反而会更麻烦。

当然,也可以直接初始化数组,但由于memset直接操作内存,所以是清零初始化大数组和结构的最快方法。

此时,“字符串数组不是最好用’\ 0’初始化吗? 可以用memset初始化字符串数组吗? 也就是说,参数c可以代入’\ 0’吗? ”

好的,不用了。 参数c需要整数,但整数类型和字符类型是互操作的。 但是,代入“\ 0”就等于0。 因为字符“\ 0”在内存中为0。 因此,在memset中初始化为0也具有结束标记“\ 0”的作用,因此通常写为“0”。

memset函数的第三个参数n的值通常由sizeof ()检索。 这很专业。 请注意,在对指针变量指向的存储单元进行清零初始化时,必须首先初始化指针变量,使其指向有效的地址。 另外,用memset初始化指针变量,例如p指向的存储单元时,n绝对不要写为sizeof。 这是初学者经常犯的错误。 因为p是指针变量,所以不管p指的是哪种类型的变量,sizeof的值都是4。

试着写一下程序吧。

# include stdio.h # include string.hint main (void ) { int i; //循环变量char str[10]; char *p=str; 短信(str,0,sizeof ) str );//只能写//sizeof(p(str ),sizeof ) for ) I=0; i10; I ) {printf(‘%d(x20 ),str[i]; }printf((n ); 返回0; 输出结果因memset函数而异,分类如下。

短信(p,0,sizeof; //地址的大小均为4字节

0000-52-52-52-52-52-52-52

短信(p,0,sizeof ) *p ); /*p表示1字节的字符变量

0-52-52-52-52-52-52-52-52-52-52-52-52

memset(p,0,sizeof ) ) str );

0 0 0 0 0 0 0 0 0 0

短信(str,0,sizeof ) str );

0 0 0 0 0 0 0 0 0 0

短信(p,0,10 ); //可以直接写10,但不专业

0 0 0 0 0 0 0 0 0 0

上述内容请参考博客。 memset函数及其用法、c语言memset函数的详细信息

bzero函数原型: ExternvoidBzero(void*s,int n ) ) ) ) ) ) ) )。

头文件: string.h

功能:集字节字符串s的前n个字节为零,包含“\ 0”

说明:没有返回值

例程:

上述参考书籍: 《UNIX网络编程卷1》

1、bzero ) )好记忆:两个参数;

2、memset ) )容易出错)三个参数,且第二个、第三个参数容易混淆,如果位置互换,c编译器不会注意到;

区别1,bzero ) )不是ANSI C函数,而是来自早期的Berkeley网络编程代码,但几乎所有支持套接字API的制造商都提供

2、memset ) )是ANSI C函数,更一般,用途广泛;

极速赛车稳赚4码>
短信(p,0,sizeof; //地址的大小均为4字节

0000-52-52-52-52-52-52-52

短信(p,0,sizeof ) *p ); /*p表示1字节的字符变量

0-52-52-52-52-52-52-52-52-52-52-52-52

memset(p,0,sizeof ) ) str );

0 0 0 0 0 0 0 0 0 0

短信(str,0,sizeof ) str );

0 0 0 0 0 0 0 0 0 0

短信(p,0,10 ); //可以直接写10,但不专业

0 0 0 0 0 0 0 0 0 0

上述内容请参考博客。 memset函数及其用法、c语言memset函数的详细信息

bzero函数原型: ExternvoidBzero(void*s,int n ) ) ) ) ) ) ) )。

头文件: string.h

功能:集字节字符串s的前n个字节为零,包含“\ 0”

说明:没有返回值

例程:

上述参考书籍: 《UNIX网络编程卷1》

1、bzero ) )好记忆:两个参数;

2、memset ) )容易出错)三个参数,且第二个、第三个参数容易混淆,如果位置互换,c编译器不会注意到;

区别1,bzero ) )不是ANSI C函数,而是来自早期的Berkeley网络编程代码,但几乎所有支持套接字API的制造商都提供

2、memset ) )是ANSI C函数,更一般,用途广泛;