在将数据读入缓冲区时读取额外的字符
Reading extra characters while reading data into buffer
我正在编写一个程序,在通过文件读取数据后通过管道发送数据。有时代码工作正常,但有时会读取一些额外的字符。但是代码工作得很好,BUF_SIZE
是 1。我猜我正在阅读一些额外的或垃圾数据,但我无法弄清楚在哪里。
额外的字符,例如:
Àêòî
#include <iostream>
#include <fstream>
#include <sys/wait.h>
#include <unistd.h>
using namespace std;
#define BUF_SIZE 512
int 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
接收的数据后面包含垃圾数据,并且 <<buf 将复制该垃圾数据,直到找到' '
相关文章:
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- 从矢量C++读取字符时出现问题
- 从格式化输入操作中获取读取字符数
- 使用 cin.get 读取字符数组
- 按下回车键时,如何使数组停止读取字符
- C++:读取字符是不正确的
- 如何从输入文件中读取字符并将其存储到向量中?
- 线程函数无法从堆上分配的缓冲区中读取字符
- 使用 cin.get() 读取字符
- C++:使用 fgets() 读取字符输入时出错
- C++ 从文件中读取字符,计算每个字符并进行排序
- C ++ ifstream 无法读取字符串,并且在读取字符时出错
- 逐字读取字符数组,无需字符串函数
- 是否有任何方法可以在用户输入文本时读取字符
- 从字符串中读取字符时出错
- 如何按字符从文件到2D数组读取字符
- 重载>>运算符和读取字符
- 从堆栈中读取字符后,如何修复不正确的文件输出
- 如何从文件中读取“”字符
- 读取字符 * 始终具有相同的地址