2

大学での私の基本的な Linux プログラミング コースでは、fcntl.h と unistd.h を使用します。C++ 文字列を使用すると、次の結果が得られます。

statusOfFunction = write(fileDescriptor, input.c_str(), input.length());

この行は機能します。入力文字列の内容を含むファイルが作成されます。しかし、なぜこれらの行のどれも機能しないのですか:

statusOfFunction = read(fileDescriptor, reading.c_str(), 10);
Error: No matching function call to "read"

statusOfFunction = read(fileDescriptor, reading, 10);
Error: No matching function call to "read"

statusOfFunction = read(fileDescriptor, &reading, 10);
No error throws up, but does not get executed

statusOfFunction = read(fileDescriptor, &reading.c_str(), 10);
Error: No matching function call to "read"

https://www.dropbox.com/s/lnw208uo3xurqxf/Basic%20Unix%20Operations%20on%20Text%20Files.cpp?dl=0

参考までにプログラムを載せておきます。ありがとうございました!:)

4

2 に答える 2

0

read は、バッファーが読み取ったデータを満たすことを想定しています。

あなたのしていることは危険です。

char バッファーを割り当て、文字列の長さの後に NULL char を追加するようreadにしてください。c_str 関数は、文字列クラスによって使用される内部バッファーを公開します。読み取り専用です。

文字列オブジェクト自体を上書きすると、後で使用すると確実にクラッシュします。

char buff[11];
size_t bytes_read = read(fd, buff, 10);
buff[bytes_read] = 0; // terminate string
string myString(buff);
于 2014-09-23T08:51:53.543 に答える