win7, vc6;新建一个单文档工程;代码;
void CMemView::OnDraw(CDC* pDC)
{
CMemDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
char buffer[4];
memset(buffer,0,sizeof(char)*4);
pDC->TextOut(10,20, buffer);
strcpy(buffer,"123");
pDC->TextOut(10,50, buffer);
char buffer1[20];
memset(buffer1,0,sizeof(char)*20);
memcpy(buffer1,"12345",5);
pDC->TextOut(10,80, buffer1);
memset(buffer1,0,sizeof(char)*20);
memcpy(buffer1,"12345",3);
pDC->TextOut(10,110, buffer1);
HANDLE hHeap = HeapCreate(HEAP_NO_SERIALIZE, 1024 * 1024, 0);
char *pszText = (char*)HeapAlloc(hHeap,HEAP_ZERO_MEMORY, 2 * 1024 * 1024);
strcpy(pszText, "hello heap!");
//printf("%s\n", pszText);
pDC->TextOut(10, 140, pszText);
HeapFree(hHeap, 0, pszText);
HeapDestroy(hHeap);
}
先定义4字节的buffer,memset设置各字节为零,输出buffer,此时在 10、20 输出的内容为空;
然后拷贝"123"到buffer,在 10、50 输出buffer;
定义20个字节的buffer1,初始化为零,memcpy拷贝内容过来,然后输出;
memcpy:第一个参数是目的,第二个参数是源,第三个参数是拷贝的长度;第一个memcpy拷贝了"12345"过去,第二个memcpy只拷贝过来"123";
然后分配堆内存,分配时设置了HEAP_ZERO_MEMORY参数,就已经初始化为全零;然后拷贝一个字符串到分配的堆内存,输出其内容;
运行如下;
memset的第二个参数是整型;写成 memset(buffer1,"0",sizeof(char)*20) 则会报错;