一个有关于memset的小程序,测试大家对它的理解

#include "stdafx.h"
#include <Windows.h>

void test(char *p);
int main(int argc, char* argv[])
{
char szDate[1024]={0};
strcpy(szDate,"0123456789012345");
test(szDate);
printf(szDate);
getchar();
return 0;
}


void test(char *p)
{

char szDate[1024]={0};
strcpy(szDate,p);
memset(p,0,sizeof(p));
memcpy(p,szDate,8);
int nLen=strlen(szDate);
if (nLen>12)
{
memcpy(p+8,szDate+12,nLen-12);
}

}

大家猜猜,最后的输出结果应该是什么呢?如果是“0123456723452345”。那么恭喜你答对了。

知道为什么吗?这是因为 memset在清空指针时,使用sizoef()取的大小是指针变量类型的大小,而不是指针实际在内存中的大小,所以我们一般使用memset清空指针,只是清空了指针变量类型的大小,而没有完全把这个类型数据清空。依然在内存中保留着。只是字符串遇到‘’没有打印出来而已。

原文地址:https://www.cnblogs.com/whbCNW/p/4349991.html