typedef struct _Record
{
    DWORD dwLength;
    ......
    char  buffer[1];
}Record, *PRecord;Record rec;
应该如何往rec.buffer里放东西呢?需要new吗

解决方案 »

  1.   

    晕,楼上的可能不知道这种占位符。
    下面是DDK里面的一段,这种技术好像是利用了数组不检查越界。
    typedef struct _SMBMRX_CONNECTINFO_
    {
        DWORD   ConnectionNameOffset;
        DWORD   ConnectionNameLength;
        DWORD   EaDataOffset;
        DWORD   EaDataLength;
        BYTE    InfoArea[1];} SMBMRX_CONNECTINFO, *PSMBMRX_CONNECTINFO;ConnectInfo = (PSMBMRX_CONNECTINFO) LocalAlloc( LMEM_ZEROINIT, MAX_CONNECT_INFO_SIZE );
        if ( ConnectInfo )
        {
            ConnectInfo->ConnectionNameOffset = 0;
            ConnectInfo->ConnectionNameLength = ConnectionName.Length;
            CopyMemory( ConnectInfo->InfoArea, ConnectionName.Buffer, ConnectionName.Length );
        ...
      

  2.   

    那会造成栈溢出的啊
    typedef struct _Record
    {
        DWORD dwLength;
        char  buffer[1];
    }Record, *PRecord;int main()
    {
    Record rec;
    strcpy(rec.buffer, "eiiweifkdsflakdsjdfsakfdksa");
    return 0;
    }
      

  3.   

    如果需要new的话 为什么不写成char* buffer呢