Cで2つの文字列を連結する関数を書きたいと仮定しましょう。それを書く方法は次のとおりです。
void concat(char s[], char t[]){
int i = 0;
int j = 0;
while (s[i] != '\0'){
i++;
}
while (t[j] != '\0'){
s[i] = t[j];
i++;
j++;
}
s[i] = '\0';
}
ただし、K&Rの本では、特にwhileループの条件部分にできるだけ多くを含めて、異なる方法で実装しています。
void concat(char s[], char t[]){
int i, j;
i = j = 0;
while (s[i] != '\0') i++;
while ((s[i++]=t[j++]) != '\0');
}
どちらの方法が好ましいですか?K&Rのようにコードを書くことは奨励されていますか?私のバージョンは他の人にとって読みやすいと思います。
while (*s++ = *t++);
K&Rは、その著書の新バージョンをリリースしました(私のCは非常にさびている、私は演算子の優先順位のためにそこに括弧が必要なのですか?)?彼らのオリジナルの本には、非常に簡潔で慣用的なコードがありました。
'\0'
をコピーしませんt
(while
最初に出口があります)。これにより、結果のs
文字列は終了せずに残ります'\0'
(メモリ位置が既にゼロに設定されていない場合)。2番目のコードブロックは'\0'
、while
ループを終了する前に終了のコピーを作成します。