私はコマンドラインで動作するプログラムを(C言語で)持っており、ユーザから任意の長さの文字列を受け入れるようにしたいと考えています。私がC++でプログラミングしていたのであれば、おそらく文字列ライブラリでgetline()関数を使用していましたが、C言語の同等物を見つけることはできません。 Xの長さのブロックで文字を読み込む必要がありますか?文字列がXの長さを超える場合は、新しい大きなブロックを作成し、新しいブロックにデータをコピーしますか?Cでのコマンドラインからの読み込み
1
A
答えて
2
fgets
とsscanf
を使用できます。
getline
は、現行のPOSIX:2008規格に含まれていることに注意してください。
http://pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html
0
利用のreadlineライブラリhttp://cnswww.cns.cwru.edu/php/chet/readline/rltop.html(ライセンスを好きではない場合もBSD相当あります)。
そこから、あなたは、ユーザーが入力した行のchar *
に戻ります機能readline()
を、使用して取得(あなたが完了したら、それにfree()
を呼び出すようにしてくださいまたはあなたがメモリリークを持っています)。ユーザが上の矢印を押して(他のほとんどすべての端末のように)前の行を取得できるように設定できるオプションさえあります。
0
realloc()
を使用して入力バッファを拡張することができます。データをコピーする必要はありません。あなたのためにそれを行います。一般的なパターンは次のとおりです。
if (n_read >= buf_size) {
buf_size *= 2;
*buf = realloc(sizeof(char) * buf_size);
}
関連する問題
- 1. Cコマンドラインから数式を読み込みました
- 2. Cのファイルからの読み込み
- 3. XMLファイルからの読み込みC#
- 4. c:ファイルからの読み込み
- 5. fifoからの読み込みC
- 6. C++ .csvファイルからの読み込み
- 7. ファイルからの読み込み - C
- 8. C++:stringstreamからの読み込み
- 9. C#PCLファイルからの読み込み
- 10. Perl:コマンドラインからのパスの読み込み
- 11. 私はPythonのコマンドラインからファイルを読み込みたい
- 12. ストリームからストリームを読み込み[C#]
- 13. ファイルからクラスオブジェクトを読み込みC++
- 14. バッファから読み込みC
- 15. Cでのパイプからの整数の書き込みと読み込み
- 16. C#スクリーンの読み込みとアニメーションの読み込み
- 17. C++でのファイルからのデータの列読み込み?
- 18. C++での.rawファイルの読み込み
- 19. jsonのC#での読み込み
- 20. C#でのデータセットの読み込み
- 21. C++ fasteファイルからの読み込みでゴミが出る
- 22. C++バイナリファイルからの倍数の書き込みと読み込み
- 23. ファイルからバイト[]を読み込み、読み込みます
- 24. C++でのファイル読み込み
- 25. システムコールのC言語での読み込みと書き込み
- 26. メディアバッファからの読み込み - ポインタの算術C++の構文
- 27. データファイルから特定の変数へのC++の読み込み
- 28. C - ファイルからの読み込み(かなりシンプル)
- 29. C++のdllからベクターデータを読み込みますか?
- 30. xmlの読み込み/プロジェクトへの組み込み - C#
POSIXシステムのための非標準の[ 'getline'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html)が利用可能であります。それ以外にも、 'getc'と' realloc'を使って自分自身をロールバックすることができます。 – cnicutar
は 'getline()'に慣れていませんが、文字列を徐々に大きくて大きなメモリブロックにコピーするのではなく、割り当てられた各ブロックを追跡しながら、必要に応じてX長のブロックだけを割り当てるのが理想的です。この1つ以上のブロックの集合は、入力文字列を表す。 – ardnew