memset、memcpy、strcpy、HeapAlloc

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) 则会报错;

猜你喜欢

转载自blog.csdn.net/bcbobo21cn/article/details/114650966