void ctestdlg::onbnclickedbutton1()
warningcmd,*pwarningcmd;
#pragma pack(pop) //恢復原位元組對齊方式
pwarningcmd pwarning;
warningcmd warning;
pwarning = &warning;
pwarning->structver = 10;
pwarning->nodeid = 4202;
pwarning->warningflag = 1234;
//int num;
//num = sizeof(*pwarning);
//byte* ch = (byte*)pwarning;
//num = strlen((char*)ch);
test((byte*)pwarning);
}bool ctestdlg::test(byte* pbuf)
這段**執行後,test()函式中的num結果為7,但如果是下面的**:
void ctestdlg::onbnclickedbutton1()
warningcmd,*pwarningcmd;
#pragma pack(pop) //恢復原位元組對齊方式
pwarningcmd pwarning;
warningcmd warning;
pwarning = &warning;
pwarning->structver = 10;
pwarning->nodeid = 4202;
pwarning->warningflag = 1234;
int num;
//num = sizeof(*pwarning);
byte* ch = (byte*)pwarning;
num = strlen((char*)ch);
test((byte*)pwarning);
}bool ctestdlg::test(byte* pbuf)
執行這段**後得:num的結果是5,這是怎麼一回事,按理說num真正的值應該是5,不可能會出現7,
兩段**的區別就是把注視的**開啟了,希望各位指導一下
關於socket資料長度
乙個包沒有固定長度,乙太網限制在46 1500位元組,1500就是乙太網的mtu,超過這個量,tcp會為ip資料報設定偏移量進行分片傳輸,現在一般可允許應用層設定8k ntfs系統 的緩衝區,8k的資料由底層分片,而應用層看來只是一次傳送。socket本身分為兩種,流 tcp 和資料報 udp tc...
關於this指標
在每個成員函式中都包含乙個特殊的指標,即this指標,它的名字是固定的。this指標是指向當前物件的指標,它的值是當前被呼叫的成員函式所在物件的起始位址。例1 class student private int age int tel int main 此時在主函式定義了乙個student的類物件a...
獲取char指標內容的長度
如果能確定所指變數為字串位址,可以用strlen p 取得字串長度。strlen能返回字串的長度是因為它認為到 0 就是結束的地方 sizeof和記憶體無關,只根據資料型別來判斷,而資料型別的長度和作業系統有關1 char a c temp a.txt n intb strlen a 2 char ...