zoukankan      html  css  js  c++  java
  • 一个有关于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清空指针,只是清空了指针变量类型的大小,而没有完全把这个类型数据清空。依然在内存中保留着。只是字符串遇到‘’没有打印出来而已。

  • 相关阅读:
    静态(static)、虚拟(virtual)、动态(dynamic)或消息处理(message)
    SQLLITE
    SQLite数据表和视图
    SQLite
    DELPHI 泛型
    indy10 学习2
    indy10 线程池
    indy
    Indy10 控件的使用(2)TidTCpServer组件学习
    Socket心跳包机制
  • 原文地址:https://www.cnblogs.com/whbCNW/p/4349991.html
Copyright © 2011-2022 走看看