1

重複の可能性:
「while(* s ++ = * t ++)」はどのように機能しますか?

私は次の例を理解しようとしていました。これが実際にどのように機能するのか少し混乱しています。

void strcpy(char *s, char *t)
{
while (*s++ = *t++)
;
}

どんな助けも素晴らしいです。ありがとう!

4

2 に答える 2

3

Cの文字列は、文字のリストへの単なるポインタであり、。で終わることに注意して\0ください。

また、 (ヌルバイト\0)は偽であることに注意してください。つまり、条件内にある場合、その条件は偽になります。

この関数は、ソース文字列の先頭へのポインタと宛先文字列の先頭へのポインタを取得します。

次に、ソース文字列の各文字をループして、その文字を宛先文字列にコピーします。条件が評価されると、ポストインクリメント++によってポインタが1バイト進みます。

私の知る限り、この実装にも問題があります。ソース文字列が正確に同じ長さでない場合、最後にnullターミネータはありません。\0安全のために、宛先文字列の最後にをタックする必要があります。

于 2012-09-20T10:35:50.143 に答える
2

の値は*s++ = *t++、割り当ての右側の値です*t。したがって、ループは* tが0のとき、つまりtが指す文字列の終わりで終了します。条件は、が指す文字を。が指す文字に割り当てた後、t(および)の値もインクリメントします。ループ本体には何もありません。条件自体がコピーを実行します。sts

于 2012-09-20T10:38:17.900 に答える