我正在从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程序员(通常坚持使用字符和整数)。我该怎么做才能确保缓冲区最后没有多余的垃圾?
答案 0 :(得分:-1)
我错过了难以捉摸的NULL终结符。
pBuffer = malloc(contentLength + 1)
...
pBuffer[contentLength] = '\0'
;