void * memset ( void *pMemoryBlock, int byte, size_t numOfByte );
2. Typical using senarios
- Bytewise memory initialization
- Zero a block of memory
- Zero a POD struct
3. Test
#include<vector> #include<string> #include<algorithm> #include<cstring> using namespace std; struct C { char a; short *b; int c[10]; }; struct CPP { string a; CPP& operator=(const CPP &r); }; CPP& CPP::operator=(const CPP &r) { if (this != &r) { (*this).a = r.a; } return *this; } char achar[3]; int aint[3]; C s; C as[3]; CPP c; CPP ac[3]; int main (){ // 1. Initialize a block of memory using a given byte memset(achar, 'a', 3); // 2. Quickly zero a block of memory memset(achar, 0, 3); memset(achar, 0, sizeof achar); memset(aint, 0, 3 * sizeof(int)); memset(aint, 0, sizeof aint); memset(as, 0, 3 * sizeof as[0]); memset(as, 0, 3 * sizeof (struct C)); // 3. Reset POD struct memset(&s, 0, sizeof(struct C)); // Caution 1. memset works byte by byte only memset(aint, 1, 3 * sizeof(int)); // aint : 16843009, 16843009, 16843009 // Caution 2. Be careful with pointer in struct s.b = new short; memset(&s, 0, sizeof s); // address of b : 0 // Caution 3. POD only //memset(&c, 0, sizeof(CPP)); // crash!!! // Either define a reseting member function, or // use fill() and '=' overriding c.a = "N/A"; fill(ac, ac+3, c); // ac : "N/A", "N/A", "N/A" return 0; }
(code test on g++ 4.6.2)
No comments:
Post a Comment
(Coding && Eating) || Sleeping