为什么80%的码农都做不了架构师?>>>   
一、memset
void *memset(void *s,int ch,size_t n);  由C Run-time Library提供的提供的函数,作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。由于是语言层面提供,所以可跨平台使用。
参考:http://www.cplusplus.com/reference/cstring/memset/
示例:
char str[] = "almost every programmer should know memset!";  
memset (str,'-',6);  
puts (str); 输出:
------ every programmer should know memset!   memset是逐字节进行填充,所以s一般为char *型。对于其它类型的s,可以填充的值有两个,0和-1。这是因为计算机中用二进制补码表示数字,0和二进制补码为全0,-1的二进制补码为全1。
二、ZeroMemory
#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))  
#define ZeroMemory RtlZeroMemory   由此可见:
- ZeroMemory实际是用memset实现的。
 - ZeroMemory只能用于windows平台。
 
注意:
ZeroMemory和memset且于清零时,会将结构中所有字节置0,如果结构体中有虚函数或结构体成员中有虚函数,则会将虚函数指针置0,如果后续程序调用虚函数,空指针很可能导致程序崩溃!
因此,有虚函数或成员中有虚函数的结构体初始化,一定要用构造函数来完成。
另外,如果一个类的结构中包含STL模板(Vector、List、Map等等),那么使用ZeroMemory对这个类的对象中进行清零操作也会引起一系列的崩溃问题(指针指向内存错误、迭代器越界访问等)。所以,再次强烈建议:类(class)只使用构造函数进行初始化,不要调用ZeroMemory进行清零操作。




![[WinError 206] 文件名或扩展名太长(组策略值修改 解除windows文件名 字符长度限制)](https://img-blog.csdnimg.cn/bdeacdd382214e63a1ccfa31e2033cb7.jpeg#pic_center)










