簡體   English   中英

C字符串的字節大小之間的差異

[英]Difference between byte size of C-String

我正在為我的數據網絡類從事一個項目,他們要求我連接一個標題,如下所示:

struct ip
{
    unsigned long a;
    unsigned long b;
    unsigned int l;
} IP;

還有一條消息,它是一個字符*,我們說“你好”。

因此,我使用此方法將兩個char *連接起來:

memcpy(sendBuf, (void*)&sendHeader, sizeof(sendHeader));
memcpy(&sendBuf[sizeof(sendHeader)], readMessage, lengthMessage);

lengthMessage是消息+1的字符數,它是空終止符。

因此,sendBuf的定義如下:

char sendBuf[BUFLEN + 1]   // BUF_LEN = 128

然后,將這個char *放入這樣定義的隊列中:

concurrency::concurrent_queue<char*> IP_in_queue;

因此,我想檢查信息是否正確,所以我只檢查所有內容:

char* s;
IP_in_queue.try_pop(s);
numbytes = sizeof(s);
// Copy from buf to the header
memcpy( (void*)&readHeader, s, sizeof( IP_PACKET_HEADER_T));
// Copy message part
memcpy( sendedString, &s[sizeof(IP_PACKET_HEADER_T)], numbytes - sizeof(IP_PACKET_HEADER_T));
// Append \0 to the end
sendedString[numbytes - sizeof(IP_PACKET_HEADER_T)] = '\0';

因此,在我將char *排隊之前,我們知道sendBuf的大小為129,但是當我在出隊后檢查字節數時,它的差別太大了,字節數的值為4,但是即使那樣我正確獲取信息,所以我不明白,也許我錯過了一些重要的東西,但是可變字節數至少不應該更多?

我希望我能說清楚一點,也許有人可以更好地向我解釋一下。

謝謝

sizeof不會告訴您字符串的長度,而是告訴您char*類型的大小,在32位計算機上為4個字節。 您需要strlen ,即字符串中的字節數。

但這不是您想要的。 您的結構IP可以包含空值,因此即使strlen也不會給出正確的答案。 如果您將字符串放在首位而不是最后一位,則可以解決該問題,但是我認為這是一種hack。 您應該在郵件的開頭明確添加大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM