私は C 入門書プラス第 5 版を読んでいて、I/O の章にいます。いくつかのことを行う例 (451 ページ) を思いつき、ある時点で、既存のファイルにちなんで名付けられた新しいファイルを作成しますが、末尾は .red です。たとえば、このファイル「test」がある場合、プログラムは「test.red」を作成します。以下が理解できません..
char name[LEN];
//some code...
strncpy(name,argv[1], LEN - 5);
name[LEN - 5] = '\0';
strcat(name,".red");
コマンド strcpy の定義を調べました。arv[1] (ソース ファイルを含む) から最初の LEN-5 文字を名前にコピーします。strcat コマンドは .red を末尾に追加します。しかし、これの存在が理解できませんname[LEN - 5] = '\0';
。私はそれを削除しましたが、プログラムはまだうまく機能しています。
EDIT
これらの行の本からのコメントを投稿します..
出力ファイルの新しい名前を作成するために、プログラムは strncpy() を使用して名前 eddy を配列 name にコピーします。LEN - 5 引数は、.red サフィックスと最後のヌル文字のための余地を残します。argv[2] 文字列が LEN – 5 よりも長い場合、ヌル文字はコピーされないため、プログラムは念のためヌル文字を追加します。strncpy() 呼び出しの後の名前の最初のヌル文字は、strcat() 関数がその文字列を追加するときに .red のピリオドで上書きされ、この場合は eddy.red が生成されます。