我正在编写程序来通过文件读取数据后通过管道发送数据。有时代码可以正常工作,但有时会读取一些额外的字符。但是BUF_SIZE为1时,代码工作得很好。我猜我正在读取一些额外的数据或垃圾数据,但我不知道该在哪里。额外的字符,例如: ÀêÒî#include <iostream>#include <fstream>#include <sys/wait.h>#include <unistd.h>using namespace std;#define BUF_SIZE 512int main(){ int fd[2]; char buf[BUF_SIZE]; pipe(fd); switch(fork()){ default:{ close(fd[1]); fstream o; o.open("out.txt",fstream::trunc|fstream::out); int numread; while(1){ numread=read(fd[0],buf,BUF_SIZE); if(numread<0) continue; if(numread==0) break; o<<buf; } o.close(); close(fd[0]); wait(NULL); break; } case 0: close(fd[0]); ifstream inp("in.txt"); char buf2[BUF_SIZE]; while(inp){ inp.read(buf2,BUF_SIZE); if(inp.gcount()!=0) write(fd[1],buf2,inp.gcount()); } inp.close(); close(fd[1]); }} 最佳答案 更改char buf[BUF_SIZE];进入char buf[BUF_SIZE+1];并插入buf[numread]=0;之前o<<buf;否则,buf在read接收的数据后面包含垃圾数据,并且o '\0'关于c++ - 在将数据读入缓冲区的同时读取额外的字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27888400/