memset()函数

来源:互联网 发布:手机支付宝软件 编辑:程序博客网 时间:2024/05/21 17:38

在写程序中有几个函数总是让我头疼如memst,memcpy,strncpy等

memst函数

所在的头文件c中#include <string.h>,c++中#include <cstring>

函数原型:void *memset(void *s, int ch, size_t n) ;

作用:将s所指向的后n个字节用ch初始化,并返回s指针,是对较大的数组和结构体进行初始化最快的一种方式

注意的是memest是按字节进行初始化的

例一:

#include <string>#include <iostream>using namespace std ;int main(){char str[20] ;memset(str, '0', sizeof(str)) ;for (int i = 0; i < 20; ++i)cout <<' '<< str[i] ;system("pause") ;return 0 ;}

输出为:

例二:

#include <string>#include <iostream>using namespace std ;int main (){  char str[] = "almost every programmer should know memset!";  memset (str,'-',6);  puts (str);  system("pause") ;  return 0;}

输出为:

后n个字节进行初始化,由于计算机采用的是大端模式,所以表现成了字符串的前6个字符初始化成了‘-’

例三:

#include <string>#include <iostream>using namespace std ;int main(){int a[5] ;memset(a, 1, sizeof(int) * 5) ;for (int i = 0; i < 5; ++i)cout <<' '<< a[i] ;system("pause") ;return 0 ;}

#include <string>#include <iostream>using namespace std ;int main(){int a[5] ;memset(a, 0, sizeof(int) * 5) ;for (int i = 0; i < 5; ++i)cout <<' '<< a[i] ;system("pause") ;return 0 ;}

上面的输出:

下面的输出:


其实我们想把这个数组初始化成1,但是memset是按字节初始化的所以出现了错误,下面是可以将int数组初始化成0

例四:memset经常用于初始化结构体

#include <string>#include <iostream>using namespace std ;struct sample_struct{    char csName[16];    int iSeq;    int iType;};int main(){struct sample_struct a[5] ;memset(a, 0, sizeof(struct sample_struct) * 5) ;system("pause") ;return 0 ;}

memset:是按字节对一块连续的内存按字节进行初始化