- ベストアンサー
文字列の連結について教えてください
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の後にコピーされる、と考えていいのですか?詳しい方アドバイスをお願いします。
- みんなの回答 (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 の基本です。 でも自分でコーディングする時はこんなトリッキーなコードを書いちゃだめだよ。
その他の回答 (1)
- fuchihiro
- ベストアンサー率25% (35/140)
私はCを勉強していましたが今はPythonを勉強しています。しかし、わかりません。Cについては http://okwave.jp/c250.html で質問ねがいます。
お礼
回答ありがとうございます。okwaveにc言語の質問できる所があったのですね。技術者向けとなっていたので、私のような初心者には、質問できないものと思っていました。これからは、こちらで質問することにします。
お礼
回答ありがとうございます。C言語を始めてからまだ2ヶ月位なので、テキストに載っているコード勉強している所です。「ポインタを進める」の説明で、destがポインタとも考えたのですが、そのdestが終端に移動してしまった時、「destに代入されている「hello\0」も、移動した結果「\0」だけになってしまう」と思っていたのですが、「指し示す位置は移動しても、保持されている値は無くならない」と言うことですね。 何かもやもやしていた部分がすっきりしたようです。