在结构体定义的时候,如果要将结构体向文件中写入的话.需要保证结构体在内存中不能出现内存陷阱.这就涉及到内存对齐的问题了.VC++中默认的对齐方式为两个字节
如下为定义为一个字节,这样内存中就不会有什么陷阱了:
#pragma pack(1)
typedef struct
{
char RiffID[4];
DWORD dwFileDataSize;
char WaveID[4];
char FMTID[4];
DWORD dwFmtSize;
WORD wFomatTag;
WORD wChannels;
DWORD dwSamplePerSec;
DWORD dwAvgBytesPerSec;
WORD wBlockAlign;
WORD wBitsPerSample;
WORD wEmpty;
char DataID[4];
DWORD dwDataSize;
}WAVEFILEHDRULAW;
#pragma pack()
如果没有pragma的命令,则在内存中回在wEmpty前面出现一个WORD大小的内存陷阱,程序中是无法对次
内存进行编辑的.但是会影响到往文件中写入的结果.这个内存陷阱也会被写入文件头.
这样当文件头是用来表示某一种文件的.则系统会无法辨认而出错的.