打印数据我有一个奇怪的问题.我使用printf打印char*字符串,然后打印另一个字符串.但是,第一个字符串的一部分不会被打印,当我打印第二个字符串时,第一个字符串的缺失部分会被添加到该字符串之前.这里发生了什么?
我正在写一个简单的libpcap implimentation.这是一个示例回调函数,它将产生相同的结果.我尝试在打印后删除缓冲并添加putchar('\n'),但它没有帮助.
void ParseData(u_char* useless, const struct pcap_pkthdr* pkthdr, const u_char* packet){
int packetLen, i;
packetLen = pkthdr->len;
for (i = 0; i < packetLen; i++){
putchar(packet[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
stdio缓冲字符.除非你另有说明,否则它通常只会在看到换行符时才发出写入.如果您想要一个不同的行为,您可以使用以下某些方法对其进行补救:
在第一次之后printf,调用fflush(stdout);刷新缓冲区.
或者,调用setbuf(stdout, NULL);禁用缓冲.在你做任何事之前这样做printf.
stdio通过编码绕过write(POSIX)或WriteFile(Windows)等平台特定API .通常我会建议不要这样做,特别是对于像stdout..