0

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

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
4

2 回答 2

4

大概是因为那个恐怖

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

修改 c_str() 是不允许的,而且这样做的可能性非常高,几乎完全可以肯定,这样做不仅会破坏内存,而且不会反映在字符串内容中。

于 2012-10-01T08:28:34.680 回答
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 字符串 生成与字符串对象具有相同内容的以空字符结尾的字符序列(c 字符串),并将其作为指向字符数组的指针返回。

所以它返回 const char * 这意味着一个指向你不能改变的字符的指针(你可以改变指针,所以 malloc 是好的,但是你不能改变指向的字符,所以 strcpy 是坏的)。

于 2012-10-01T09:14:47.730 回答