📄 subject_27434.htm
字号:
<p>
序号:27434 发表者:嵇山 发表日期:2003-01-11 17:13:27
<br>主题:真的是很奇怪的问题,难道是vc的bug.大家帮忙试一试
<br>内容:#include <windows.h><BR>#include <stdio.h><BR><BR>typedef unsigned char uchar;<BR>typedef unsigned short ushort;<BR>typedef unsigned long ulong;<BR>typedef struct {<BR> uchar Protocol[4]; /*Contains 0xFF,'SMB'*/<BR> uchar Command; /*Command Code*/<BR> union <BR> {<BR> struct<BR> {<BR> uchar ErrorClass; /*Error Class*/<BR> uchar Reserved; /*Reserved for future use*/ <BR> ushort Error; /*Error Code*/<BR> } DosError;<BR> ulong Status; /*32-bits error code*/<BR> } Status ;<BR> uchar Flags; /*Flags*/<BR> ushort Flags2; /*More Flags*/<BR> union<BR> {<BR> uchar Pad[12];<BR> struct<BR> {<BR> uchar PidHigh[2]; /*High Part of the Pid*/<BR> uchar Unused[4]; /*Not Used*/<BR> uchar Unused2[4]; /*Not Used*/<BR> } Extra;<BR> } PadExtra;<BR> uchar Tid[2]; /*Tree Identifier*/<BR> uchar Pid[2]; /*Caller's process ID*/<BR> uchar Uid[2]; /*Unauthenticated user ID*/<BR> uchar Mid[2]; /*Multiplex Id*/<BR><BR>}SmbBaseHdr ;<BR><BR>void main()<BR>{<BR> //SmbBaseHdr test;<BR> printf("%d\n",sizeof(SmbBaseHdr));<BR>}<BR><BR><BR><BR>我想结果应该是32,但是为什么是36呢.<BR>怪异
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:嵇山 回复日期:2003-01-11 18:09:38
<br>内容:#include <windows.h><BR>#include <stdio.h><BR><BR>typedef unsigned char uchar;<BR>typedef unsigned short ushort;<BR>typedef unsigned long ulong;<BR>typedef struct {<BR> uchar Protocol[4]; /*Contains 0xFF,'SMB'*/<BR> uchar Command; /*Command Code*/<BR>union <BR>{<BR> uchar Flags; /*Flags*/<BR> ushort Flags2; /*More Flags*/<BR> struct<BR> {<BR> uchar ErrorClass; /*Error Class*/<BR> uchar Reserved; /*Reserved for future use*/ <BR> ushort Error; /*Error Code*/<BR> } DosError;<BR> ulong Status; /*32-bits error code*/<BR>} Status ;<BR><BR>union<BR>{<BR> uchar Pad[12];<BR> struct<BR> {<BR> uchar PidHigh[2]; /*High Part of the Pid*/<BR> uchar Unused[4]; /*Not Used*/<BR> uchar Unused2[4]; /*Not Used*/<BR> } Extra;<BR>} PadExtra;<BR>uchar Tid[2]; /*Tree Identifier*/<BR>uchar Pid[2]; /*Caller's process ID*/<BR>uchar Uid[2]; /*Unauthenticated user ID*/<BR>uchar Mid[2]; /*Multiplex Id*/<BR><BR>}SmbBaseHdr ;<BR><BR>void main()<BR>{<BR> //SmbBaseHdr test;<BR> printf("%d\n",sizeof(SmbBaseHdr));<BR>}<BR><BR><BR>如果是这样的话,输出是32,<BR>就是把uchar Flags; /*Flags*/<BR>ushort Flags2; /*More Flags*/<BR>放到结构体的上面.<BR> 简直没有天理.<BR>晕了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:songxinye 回复日期:2003-01-11 18:39:32
<br>内容:结构体有对齐问题,你可以在VC的Setting的C/C++中Code Generation中看到,<BR>确省的是8,这是为了提高速度,让结构的起始地址为8的倍数。如果你改为1或2或4,<BR>你那两种情况就相同了,这种事情特别是混合语言编程时需要特别注意
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:嵇山 回复日期:2003-01-11 18:53:55
<br>内容:谢谢songyas,<BR>但是我刚才改成1,或2,或4,编译时都有这个警告:<BR>test.cpp<BR>E:\myproject\test\test.cpp(4) : warning C4653: compiler option 'structure packing (/Zp)' inconsistent with precompiled header; current command-line option ignored<BR><BR><BR>然后结果还是不对<BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:songxinye 回复日期:2003-01-11 19:08:27
<br>内容:我试了以下,你的第一个结果32,程序如下,你设对齐为1
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:嵇山 回复日期:2003-01-11 19:35:51
<br>内容:感激涕零<BR>谢谢<BR>鞠躬!<BR>太感谢了.<BR>谢谢songyas!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:嵇山 回复日期:2003-01-11 19:46:56
<br>内容:songyas:<BR><BR>不好意思,麻烦你了,<BR>我用你的程序编译了一下,是可以的,<BR>但是我看我的和你的一样,但就是不能够.<BR>这是我的程序,如果你有空的话,帮我看看<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:songxinye 回复日期:2003-01-11 19:57:44
<br>内容:我用你的也没问题
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:嵇山 回复日期:2003-01-11 22:01:15
<br>内容:谢谢<BR>呵呵<BR>我都快晕了<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:嵇山 回复日期:2003-01-11 22:04:19
<br>内容:songyas:<BR>刚才机器重新启动了一下<BR>可以 <BR>谢谢
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -