我正在从HTTP包装的TCP套接字中读取一些HTTP数据。我的仪器正常工作,但有一种奇怪的综合症。基本上,我知道内容长度是什么(通过header 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程序员(通常坚持字符和ints)。我能做些什么来确保缓冲区在最后不充满额外的垃圾?
发布于 2018-02-08 15:43:40
我想念那个难以捉摸的空终结者。
pBuffer = malloc(contentLength + 1)
..。
pBuffer[contentLength] = '\0';
https://stackoverflow.com/questions/48688799
复制相似问题