私はコマンドラインで動作するプログラムを(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++ .csvファイルからの読み込み
- 2. XMLファイルからの読み込みC#
- 3. C#PCLファイルからの読み込み
- 4. c:ファイルからの読み込み
- 5. C++:stringstreamからの読み込み
- 6. Perl:コマンドラインからのパスの読み込み
- 7. 私はPythonのコマンドラインからファイルを読み込みたい
- 8. バッファから読み込みC
- 9. ストリームからストリームを読み込み[C#]
- 10. C#スクリーンの読み込みとアニメーションの読み込み
- 11. Cでのパイプからの整数の書き込みと読み込み
- 12. C#でのデータセットの読み込み
- 13. ファイルからバイト[]を読み込み、読み込みます
- 14. C++バイナリファイルからの倍数の書き込みと読み込み
- 15. C++でのファイル読み込み
- 16. データファイルから特定の変数へのC++の読み込み
- 17. メディアバッファからの読み込み - ポインタの算術C++の構文
- 18. xmlの読み込み/プロジェクトへの組み込み - C#
- 19. dbからのビューの読み込み
- 20. iframeのリソースファイルからの読み込み
- 21. ファイルからの蟻の読み込み?
- 22. iOSのスレッドエラーテキストファイルからの読み込み
- 23. テキストファイルからのJavaの読み込み
- 24. AJAX読み込みページ内の別のページからdivを読み込み
- 25. C#スプラッシュ読み込みページ
- 26. C++ cin読み込みSTDIN
- 27. C - ファイルからの読み込み(かなりシンプル)
- 28. C++の空白を含むファイルからの読み込み
- 29. C++ .txtファイルからスタックへの整数の読み込み
- 30. 1バイトあたりのファイルバイトからの読み込みC++
POSIXシステムのための非標準の[ 'getline'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html)が利用可能であります。それ以外にも、 'getc'と' realloc'を使って自分自身をロールバックすることができます。 – cnicutar
は 'getline()'に慣れていませんが、文字列を徐々に大きくて大きなメモリブロックにコピーするのではなく、割り当てられた各ブロックを追跡しながら、必要に応じてX長のブロックだけを割り当てるのが理想的です。この1つ以上のブロックの集合は、入力文字列を表す。 – ardnew