[英]Reading and storing data from a TCP buffer in C
我正在從 HTTP 包裝的 TCP 套接字讀取一些 HTTP POST 數據。 我的儀器工作正常,但有一種奇怪的綜合症。 基本上我知道內容長度是多少(通過 HTTP 標頭Content-length
)但我似乎經常建立一個比預期長 2-3 個字節的緩沖區。 我知道我沒有在初始化時設置緩沖區大小,但是當我這樣做時,我會遇到很多編譯錯誤。 下面的代碼幾乎可以工作,但通常會在緩沖區中產生比應有的更多的數據。
long bytesRead;
unsigned long bytesRemaining;
sbyte *pBuffer;
sbyte *pTmpBuffer;
pBuffer = malloc(contentLength);
memset(pBuffer, 0, contentLength);
pTmpBuffer = pBuffer;
bytesRemaining = contentLength;
while(bytesRemaining > 0){
if(maxBuffSize < bytesRemaining){
chunkSize = maxBuffSize;
}
else {
chunkSize = bytesRemaining;
}
bytesRead = tcpBlockReader(pHttpData, pTempBuff, chunkSize);
bytesRemaining -= bytesRead;
pTempBuff += bytesRead;
}
printf("Data is %s\n", pBuffer);
printf("Length is %d\n", strlen(pBuffer));
現在有時它會很完美,即
Data is expected+data
Length is 13
有時它會是
Data is expected+data+(weird characters)
Length is 15
所以我認為這里的問題是我沒有為緩沖區設置大小(即pBuffer[contentLength]
)。 當我這樣做時,雖然我得到了incompatible types
錯誤,但什么不是。 我不是一個精通 C 的程序員(通常堅持使用字符和整數)。 我能做些什么來確保緩沖區最后沒有裝滿額外的垃圾?
我錯過了難以捉摸的 NULL 終止符。
pBuffer = malloc(contentLength + 1)
...
pBuffer[contentLength] = '\\0'
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.