這聽起來像是一個愚蠢的問題,但我了解到有時,尤其是在 C 中,有些事情看起來很明顯,但并不真正安全或正確。
我有一個char通過 HTTP 填充文本的緩沖區(不需要二進制資料)。
現在我想處理請求正文,我認為strstr()這正是我想要的。
但是,strstr()需要兩個字串都以 null 結尾。
由于我無法控制用戶實際發送的內容,因此我決定在末尾終止“字串”(緩沖區),如下所示:
char buffer[1024];
// receive request
readHTTPRequest(buffer, sizeof(buffer));
// buffer contents is undetermined
buffer[sizeof(buffer) - 1] = 0; // always terminate buffer
const char *request_body = strstr(buffer, "\r\n\r\n");
if (request_body) {
size_t request_body_size = strlen(request_body);
}
這種方法安全嗎?我錯過了什么嗎?
uj5u.com熱心網友回復:
這僅在緩沖區完全填滿時才有效。如果沒有,您將在實際讀取的內容和最后一個位元組之間有未初始化的位元組。
處理這個問題的一個簡單方法是用全零初始化緩沖區:
char buffer[1024] = {0};
或者,如果readHTTPRequest回傳讀取的位元組數,則使用該值作為將 0 位元組寫入的索引。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/366250.html
下一篇:如何在C中讀取大資料?[復制]
