C++のpopen()
は、プロセスを実行した後の出力を含むファイル記述子を返します。 FILE *の代わりに、char *が必要です。私の出力になる文字列。私は何をしますか?私を助けてください。C++のpopen()の文字列への出力
答えて
私はこの一般的な順序で何かをしたいとします
char big_buffer[BIG_SIZE];
char small_buffer[LINE_SIZE];
unsigned used = 0;
big_buffer[0] = '\0'; // initialize the big buffer to an empty string
// read a line data from the child program
while (fgets(small_buffer, LINE_SIZE, your_pipe)) {
// check that it'll fit:
size_t len = strlen(small_buffer);
if (used + len >= BIG_SIZE)
break;
// and add it to the big buffer if it fits
strcat(big_buffer, small_buffer);
used += strlen(small_buffer);
}
あなたがより精巧な取得したい場合は、動的に領域を割り当て、および出力の量を保持するために、必要に応じて、それを増やすしようとする可能性がありあなたは得る。子供がどのくらいのアウトプットを生み出すかについて少なくともいくらか考えなければ、それはより良いルートになるでしょう。
編集:
char line[line_size];
std::string result;
while (fgets(line, line_size, your_pipe))
result += line;
最終結果に 'std :: string'を使い、' append'を使うのはなぜでしょうか? –
@KerrekSB:主に私は何とかC++ではなくCとしてタグ付けされていると思っていたからです。 –
通常のstdio
ルーチンを使用して、FILE*
の出力を文字列に変換します。
返信いただきありがとうございます。あなたはサンプルコードを提供してください... !!! –
がへのtypedefを含むhttps://stackoverflow.com/a/10702464/981959
次の2つのラインでそれを行うことができます(3を参照してください:あなたがCを使用していることを考えると++、動的なサイズの結果は、実際にはかなり簡単です。可読性を向上させます)。
#include <pstream.h>
#include <string>
#include <iterator>
int main()
{
redi::ipstream proc("./some_command");
typedef std::istreambuf_iterator<char> iter;
std::string output(iter(proc.rdbuf()), iter());
}
これは、すべてのメモリ割り当てを処理し、ストリームの終了時に再びストリームを閉じます。
- 1. 文字列にC++読み込みpopenエラー出力
- 2. ファイルへのpopen()の出力
- 3. コンソールの文字列への出力
- 4. 標準出力バッファの監視と文字列へのリダイレクトC++
- 5. Pythonの文字列リテラル内popenのコマンド
- 6. JavaのJTextAreaへの配列の出力文字列
- 7. 文字列へのポインタ - C
- 8. C++:文字列へのポインタ
- 9. char * C#の文字列へ
- 10. 文字列出力の出力比較
- 11. 文字列で作業するときのSegフォルトCプログラム/ Popen
- 12. jaxbの出力文字列
- 13. 文字列配列無限ループへのC++ユーザー入力
- 14. C奇妙な文字列出力
- 15. printf文字列出力 "Dz↕" getch()C++
- 16. C文字列の配列へのポインタ
- 17. Cで文字列配列のインデックスのみを出力する#
- 18. メインプログラムの文字列へのJFrame出力の保存
- 19. C言語のクラス変数への文字列入力
- 20. 文字列への入力のグラブ値
- 21. Cで文字列配列の出力を改行します。
- 22. C#ユーザ入力ボックスから文字列へのパスを渡す
- 23. C#のURIへの文字列操作
- 24. C++のビットセットへの文字列
- 25. c#FIMの文字列への参照
- 26. Cのconst文字列へのポインタ
- 27. JSON C#のDataTableオブジェクトへの文字列
- 28. フレックスレクサーへの文字列入力
- 29. 文字列へのMaskedEditText入力
- 30. C++出力オブジェクトへの配列の出力(関数別)
このスレッドに見てください: http://stackoverflow.com/questions/478898/how-to-execute-a-command-and-get-output-of-command-within-c 幸運を祈る! – DCMaxxx