2013-08-04 39 views
0

我記得閱讀關於使用這行代碼的解釋,但過去一週我已經閱讀了很多關於套接字的書籍,我再也找不到它了。緩衝=「 0」的目的是什麼

我在書中千萬記住,他們使用= \ 0寫自己的代碼,然後說這將是最好有它在1

我試圖尋找,但沒有運氣,這是一塊我讀它是用來

nread = recv(newsock, buffer, 25, 0); 
buffer[nread] = '\0'; 
+3

我希望'buffer'至少26長... ...和代碼應繼續之前肯定檢查'NREAD == -1'。 (或者說,在設置結束標記之前它不是-1) –

+0

@Borgleader在他們告訴我之前我不知道它叫什麼,所以我無法正確搜索它。 – user2644360

回答

5

原來接收緩衝區爲NUL終止的C字符串,您可以與strlen, strcpy, etc. 使用我想告訴你的代碼的代碼是用於說明目的只有,而不是生產代碼,因爲你沒有檢查recv的返回值,whic h可以是-1。如果發生這種情況,會導致內存損壞。

0

這是表示字符串在該字節結束。在這種情況下是最後一個。

\ 0是空字符。

所以你沒有得到像垃圾「這是我message.aG¤(Ag4h98av¤」 G#¤」。試想有一個\ 0,在該字符串的結尾。

當與網絡打交道,你通常希望發送像整數這樣的數據,最常見的做法是以二進制形式發送它,而不是明文形式。一個整數可能看起來像「$%\ 0n」,例如4字節,但第三個是\ 0。所以你必須考慮到可以有一個\ 0,因此你不應該把數據的二進制表示存儲爲一個字符串,而應該存儲爲一個緩衝器/字符串流。打印出它的二進制表示,但你必須牢記在心。也許你想打印出來,誰知道。