ターミナルの幅は、他の答えが示す方法を使って見つけることができます。しかしそれは問題の一部にすぎません。トリッキーなビットはコンソールに合わせて出力をフォーマットしています。私はテキスト単語を単語で読み、単語がその幅を越えたときに出力を次の行に移動するという選択肢はないと思います。空白の場所を検出するメソッドを実装する必要があります。これは、行内に複数の空白がある可能性があるという事実を考慮しています。 CR/LFのような改行の空白を処理する方法を決める必要があります。句読点で単語を区切ることができるかどうかを判断する必要があります(ハイフンなど)。私のアプローチは、状態が「行頭にある」、「単語で」、「空白で」などの単純な有限状態マシンを使用することです。文字(または文字クラス)は、状態を変えるイベント。
Cで作業するときに特に問題となるのは、マルチバイト文字の組み込みサポートがほとんどないことです。それはあなたが英語でしかないと確信しているテキストで、ASCII句読記号だけを使用しても問題ありませんが、どんな種類の国際化であれ、より注意する必要があります。私は、テキストをある種のワイドフォーマット、おそらくUTF-32に変換してから、文字を表現するために32ビット整数の配列を扱うのが最も簡単だと分かっています。あなたのテキストがUTF-8の場合、この変換をしなくても済むようにするための様々なトリックがありますが、少し醜いです。
私は共有することができるコードをいくつか持っていますが、私はそれが生産品質であると主張していないし、理解しやすいものでもありません。このシンプルに見える問題は、実際には第一印象よりもはるかに複雑です。ひどくやりにくいですが、うまくやるのは難しいです。
端末のサイズを調べる必要があり、出力をそのサイズに合わせる必要があります。 TIOCGWINSZを検索してください。それは特徴的です。 –