• ベストアンサー

文字列の連結について教えてください

C言語での文字列の連結で悩んでいます。dest = hello\0; src = world\0; (1) while (*dest++) {} (2) dest--; (3) while (*dest++ = *src++) {} の時、 (1)と(3)の記述について教えてください。 (1)は、「ポインタを、終端まで進める」の説明がついているのですが、 この説明でのポインタとは、「⇒」のようなものと考えていいですか?それとも、アドレス全体を指しているのですか? 「⇒」と考えると、「⇒」の所は、値の変更や移動などが出来るのでしょうか? (3)については、*src++の全部が、*dest++の中に代入されてから、srcの中のwがdestの\0の位置にコピーされた後、お互いひとつずつインクリメントをしてから、srcのoが、destのwの後にコピーされる、と考えていいのですか?詳しい方アドバイスをお願いします。

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

  • ベストアンサー
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

strcat( char* dest, const char* src ) のソースコードがわからんということかな。 >「⇒」のようなものと考えていいですか? 意味がわかりません。 *dest++ とは 式の値は *dest、副作用で dest の指す位置が次に進む。故に(1)では、dest の指している位置が \0 まで来たらループを抜ける。ここのとき dest は \0 の「次の」場所を指している。 同様に、*dest++ = *src++ とは、式の値は *dest = *src、副作用で dest と src の位置が次に進む。src の指す位置が \0 まで来たら代入式の値が \0 になるので、ループを抜ける。 ++ が後置されているので、式の評価の際にはインクリメントされる前の値が使用されます。C の基本です。 でも自分でコーディングする時はこんなトリッキーなコードを書いちゃだめだよ。

noname#220054
質問者

お礼

回答ありがとうございます。C言語を始めてからまだ2ヶ月位なので、テキストに載っているコード勉強している所です。「ポインタを進める」の説明で、destがポインタとも考えたのですが、そのdestが終端に移動してしまった時、「destに代入されている「hello\0」も、移動した結果「\0」だけになってしまう」と思っていたのですが、「指し示す位置は移動しても、保持されている値は無くならない」と言うことですね。 何かもやもやしていた部分がすっきりしたようです。

その他の回答 (1)

  • fuchihiro
  • ベストアンサー率25% (35/140)
回答No.1

私はCを勉強していましたが今はPythonを勉強しています。しかし、わかりません。Cについては http://okwave.jp/c250.html で質問ねがいます。

noname#220054
質問者

お礼

回答ありがとうございます。okwaveにc言語の質問できる所があったのですね。技術者向けとなっていたので、私のような初心者には、質問できないものと思っていました。これからは、こちらで質問することにします。

関連するQ&A

専門家に質問してみよう