为什么这只会创建一个空白的输出文件

Why does this just make a blank output file

本文关键字:一个 空白 文件 输出 创建 为什么      更新时间:2023-10-16

我有这段代码,它试图将从管道(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: %sn", line.c_str());
    outFile << line;
}
outFile.close();
close(fd_3[READ_END]); //done reading

可能是因为那个可怕的

while(read(fd_3[READ_END], (void*)line.c_str(), BUFFER_SIZE)) {
修改 c_str() 是不允许的,并且几乎完全确定这样做不仅

会损坏内存,而且不会反映在字符串内容中的可能性非常高。

问题可能就在这里:

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),并将其作为指向字符数组的指针返回。

所以它返回常量字符 * 这意味着指向您无法更改的字符的指针(您可以更改指针,因此 malloc 没问题,但您无法更改指向的字符,因此 strcpy 很糟糕)。