• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語の質問です)

C言語のコピー元ファイルとコピー先ファイルを指定してファイルをコピーするプログラム

このQ&Aのポイント
  • 下記のプログラムはコマンドラインからコピー元ファイルとコピー先ファイルを指定し、コピーするプログラムです。
  • ファイルをコピーしてタブ文字を適切な数のスペースに置き換える処理を行います。
  • コピー元ファイルを開き、コピー先ファイルを作成し、ファイルをコピーします。タブ文字が出現した場合は、適切な数のスペースに置き換えます。

質問者が選んだベストアンサー

  • ベストアンサー
noname#58357
noname#58357
回答No.2

ちなみに今回のは、tabを8に設定ていて、fromファイルが、 abc\tdef\tghi\njkl\tmno なら、toファイルは、 012345670123456701234567 <-tab位置 abc def ghi   <-toファイ1行目 jkl mno <-toファイ2行目

Guchiken
質問者

お礼

回答ありがとうございます! タブが半角8文字分とするとき、タブが開始する位置(カーソルが止まる位置)を過ぎて、文字がある場合に、タブが8文字分未満になるから、その途中の位置を知るために、count++; して、それを、for文で初期値として与える。 こういうことなんですね? どの位置からスペースに置換してよいか知るために行の桁位置を0から7としていたんですね! 回答がとても分かりやすく、理解できました。勉強になります! 回答ありがとうございました。

その他の回答 (1)

noname#58357
noname#58357
回答No.1

else { if(!feof(from)) fputc(ch, to); count++; if(count==8 || ch=='\n') count = 0; } で、 if(!feof(from)) fputc(ch, to); は、fromのデータをtoに書き込んでいます。 "if(!feof(from)) "が成立しない場合は、 ファイルの最後なので、何もしません。 count++; if(count==8 || ch=='\n') count = 0; は、tabの処理のためです。 1行中の位置を 0123456701234567--- であらわわし、0-7のどれにあたるかを"count"により 示しています。 つまり、1行中の10番目なら、count=1です。 '\n'は改行なので、行のはじめ、つまり0となります。

関連するQ&A

専門家に質問してみよう