//定义一个文件结构体
typedef struct _FileHeader{
BYTE btTag[4];
BYTE btVersion;
BYTE btFormat;
DWORD dwCIDRange_Start;
DWORD dwCIDRange_End;
DWORD dwDataSize;
DWORD dwDataOffset;
DWORD dwRecordsize;
}FILEHEADER;
//定义文件头结构体变量初始化
FILEHEADER fh;
//----------------------
fh.btTag[0]='F';
fh.btTag[1]='X';
fh.btTag[2]='M';
fh.btTag[3]='P';
    fh.btVersion='1';
fh.btFormat='0';
fh.dwCIDRange_Start=0;
fh.dwCIDRange_End=29063;
fh.dwDataSize=29063*4;
fh.dwDataOffset=0;
fh.dwRecordsize=32;
//将文件头对象复制到内存块中
LPBYTE pt;
memcpy(&fh,pt,sizeof(FILEHEADER)); 调试的时候内存老出错,什么地方出问题了?问题问后不少高手给我了提示!非常感谢!
现在我修改了一下
//定义一个文件结构体
typedef struct _FileHeader{
BYTE btTag[4];
BYTE btVersion;
BYTE btFormat;
DWORD dwCIDRange_Start;
DWORD dwCIDRange_End;
DWORD dwDataSize;
DWORD dwDataOffset;
DWORD dwRecordsize;
}FILEHEADER;
//定义文件头结构体变量初始化
FILEHEADER fh;
//----------------------
fh.btTag[0]='F';
fh.btTag[1]='X';
fh.btTag[2]='M';
fh.btTag[3]='P';
    fh.btVersion='1';
fh.btFormat='0';
fh.dwCIDRange_Start=0;
fh.dwCIDRange_End=29063;
fh.dwDataSize=29063*4;
fh.dwDataOffset=0;
fh.dwRecordsize=32;
//将文件头对象复制到内存块中
LPBYTE pt = new BYTE[sizeof(FILEHEADER)]; 
memcpy(&pt, &fh, sizeof(FILEHEADER)); 没有错误提示了,请问我这样的做法合理么?

解决方案 »

  1.   

    void *memcpy( void *dest, const void *src, size_t count )
    是从src拷贝到dest,而不是你的第一种情况
      

  2.   

    不应该是这样:memcpy(&pt, &fh, sizeof(FILEHEADER));
    应该是:memcpy(pt, &fh, sizeof(FILEHEADER));
    pt本来就是一个指针了
      

  3.   

    void CPDF_CIDTOUNICODEDlg::OnButton1() 
    {
    //创建一个数据文件"CIDTOUNICODE",如果没有则创建,如果有则清空
    CFile f=NULL;
    CFileException e;
    char* pFileName = "CIDTOUNICODE";
    if( !f.Open( pFileName, CFile::modeCreate | CFile::modeWrite, &e ) )
    {
    #ifdef _DEBUG
    afxDump << "File could not be opened " << e.m_cause << "\n";
    #endif
    }
    //定义一个文件头结构体
    typedef struct _FileHeader{
    BYTE btTag[4];
    BYTE btVersion;
    BYTE btFormat;
    DWORD dwCIDRange_Start;
    DWORD dwCIDRange_End;
    DWORD dwDataSize;
    DWORD dwDataOffset;
    DWORD dwRecordsize;
    }FILEHEADER;
    //定义文件头结构体变量并初始化
    FILEHEADER fh; fh.btTag[0]='F';
    fh.btTag[1]='X';
    fh.btTag[2]='M';
    fh.btTag[3]='P';
        fh.btVersion='1';
    fh.btFormat='0';
    fh.dwCIDRange_Start=0x0000;
    fh.dwCIDRange_End=0x7187;
    fh.dwDataSize=0x7187;
    fh.dwDataOffset=0x0000;
    fh.dwRecordsize=0x0004;
    //将文件头结构体变量的内容复制到内存块中
    BYTE* pt = new BYTE[sizeof(FILEHEADER)]; 
    memcpy(pt, &fh, sizeof(FILEHEADER)); 
    //将内存块中的内容输出到文件中
    f.Write(&pt,sizeof(FILEHEADER));
    //关闭打开的文件
    if (f!= NULL)
    {
    f.Close();
    MessageBox("Creat Map File Success!");
    }
    //释放内存中的无用空间}
    我创建出来文件开头应该是 "FXMP"可是结果输出文件的文件头怎么是 "E7 FXMP10烫    噏  噏"
      

  4.   

    还有//释放内存中的无用空间
    怎么释放?
    下面这样好象不可以
    delete pt;
      

  5.   

    1、不是:f.Write(&pt,sizeof(FILEHEADER));
       而是:f.Write(pt,sizeof(FILEHEADER));2、delete []pt;