C++ printf大缓冲区

0 c++ sockets

我遇到的问题是printf没有打印从客户端响应返回的所有数据.(验证数据通过数据包嗅探器发回)

#define MAXBUFFER    24576
char buffer[MAXBUFFER];
......
datastream = read(sock,buffer,MAXBUFFER - 1);
printf("%s",buffer);
......
Run Code Online (Sandbox Code Playgroud)

将所有客户数据打印到控制台的最佳方法是什么?同时消除BOF的潜力?

Eug*_*nca 11

可能的原因:

  1. read 不能保证一次只是尝试读取所有数据,这就是为什么它返回读取的字符数;

  2. printfwith %s将打印到'\0'缓冲区中的第一个[ASCII代码0].


Jim*_*wis 11

如果缓冲区有任何零字节,它们将被视为字符串终止符.这是ASCII还是二进制协议?如果是后者,您可能希望在打印前转换为十六进制.