memset、memcpy、strcpy、HeapAlloc 骑猪看日落 2022-11-07 04:18 167阅读 0赞 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参数,就已经初始化为全零;然后拷贝一个字符串到分配的堆内存,输出其内容; 运行如下; ![20210311025814146.png][] memset的第二个参数是整型;写成 memset(buffer1,"0",sizeof(char)\*20) 则会报错; ![20210311030719174.png][] [20210311025814146.png]: /images/20221023/79e89414a6a94129a764b25cb4bde98c.png [20210311030719174.png]: /images/20221023/d37bd0e2f3e14c9f8e0749dac130d257.png
还没有评论,来说两句吧...