C stdout printf

Ili*_*oly 0 c printf stdout

打印数据我有一个奇怪的问题.我使用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)

asv*_*kau 7

stdio缓冲字符.除非你另有说明,否则它通常只会在看到换行符时才发出写入.如果您想要一个不同的行为,您可以使用以下某些方法对其进行补救:

  • 在第一次之后printf,调用fflush(stdout);刷新缓冲区.

  • 或者,调用setbuf(stdout, NULL);禁用缓冲.在你做任何事之前这样做printf.

  • stdio通过编码绕过write(POSIX)或WriteFile(Windows)等平台特定API .通常我会建议不要这样做,特别是对于像stdout..