0

パイプ(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
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-string) を生成し、文字配列へのポインターとして返します。

そのため、 const char * を返します。これは、変更できない文字へのポインターを意味します (ポインターを変更できるため、malloc は問題ありませんが、指している文字を変更することはできないため、strcpy は不適切です)。

于 2012-10-01T09:14:47.730 に答える