2016-04-01 5 views
-4

私はstrcpy関数でこれを読んでいます。どのようにwhile(* dst ++ = * srC++); '実行される?

while (*dst++ = *src++) 
    ; 

私は実際に実行順序がわかりません。誰が私を助けられるか?

+0

演算子の優先順位は 'postfix>単項式>代入'となり、最後に 'iteration-statement'はその制御式が非ゼロと評価されるたびに' null-statement'を評価します。 – EOF

答えて

0

接尾辞++演算子は、実行中のステートメントの後に変数の値をインクリメントします。

  1. 文字srcポイントにまでに文字dstポイントを設定します。基本的にはなり

    while (*(dst++) = *(src++)); 
    

    :Cの優先順位規則によると、彼の式は次のように評価されます。

  2. 両方ともインクリメントdstsrc
  3. 文字が'\0'の場合は、ループを終了します。
  4. それ以外の場合は、繰り返します。
+0

したがって、 '\ 0'はコピーされません。 – protream

+0

ループは値をチェックする前に文字をコピーするので、 ''\ 0' 'がコピーされます。また、私があなたの質問に答えたら、それを受け入れるようにしてください。 – Functino

+0

@protream "right?"明らかにこの記述によれば正しくない。ステップ1でcharをコピーします。ステップ3は、それが '\ 0'であるかどうかをチェックする。 –

関連する問題