为什么这只是一个空白的输出文件

时间:2012-10-01 08:11:20

标签: c++ fstream

我有这段代码试图将从管道(fd_3)收到的行写入输出文件。作者打印收到的行;然后行正确打印所有行,但每次输出文件都是空白的。有什么想法吗?

close(fd_3[WRITE_END]); //wont be writing to Munch2

ofstream outFile;
outFile.open("output.txt");
if(!outFile) {
    printf("File output.txt could not be opened");  
}

while(read(fd_3[READ_END], (void*)line.c_str(), BUFFER_SIZE)) {
    printf("writer receives: %s\n", line.c_str());
    outFile << line;
}

outFile.close();

close(fd_3[READ_END]); //done reading

2 个答案:

答案 0 :(得分:4)

可能是因为那个可怕的

while(read(fd_3[READ_END], (void*)line.c_str(), BUFFER_SIZE)) {

不允许修改c_str(),并且几乎完全肯定这样做的机会不仅会破坏内存,还不会反映在字符串内容中。

答案 1 :(得分:0)

问题可能就在这里:

while(read(fd_3[READ_END], (void*)line.c_str(), BUFFER_SIZE)) { 

c_str在这里说:

std::string::c_str<string>const char* c_str ( ) const;

获取等效的C字符串 生成以字符串对象为内容的以null结尾的字符序列(c-string),并将其作为指向字符数组的指针返回。

所以它返回const char *表示 指向你无法改变的字符的指针(你可以改变指针,所以malloc没问题,但是你不能改变指向的字符,所以strcpy很糟糕)。