關於指標長度

2021-07-26 06:13:32 字數 1116 閱讀 5727

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 ...