• 締切済み

K&Rのstrcopy

void strcpy(char *s, char *t) { while (*s++ = *t++) ; } 上記ソースはC言語を作った人が勧めているものらしいですが、普通にstrcopy()を使うと、内部ではこのような処理がされるのでしょうか?

みんなの回答

  • rentahero
  • ベストアンサー率53% (182/342)
回答No.3

ふむ。FreeBSDのlibcに入ってるstrcpyのソースは #include <string.h> char * strcpy(to, from) register char *to; register const char *from; { char *save = to; for (; (*to = *from); ++from, ++to); return(save); } こうなってます。whileではなくてforでやってますが、処理はほぼ同じですね。 なぜforになっているかというと、演算子の処理順がコンパイラに依存することがあるからです。 これをwhileで書き換えるなら while (*to = *from) ++from, ++to; となります。

すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

標準関数のstrcpyは、コピー先のポインタを返さないといけないので多少異なります。 返却値がない場合でも、貼られたコードはあまり効率がよくありません。なぜなら、最後に無駄なインクリメントが発生してしまうからです。 > 普通にstrcopy()を使うと、内部ではこのような処理がされるのでしょうか? strcopyのつづりが違うのは置いといて、ターゲットによっては、ストリング命令が使えたりするので、C言語では表現できない実装になっている場合も多々あります。他には、ワード単位でコピーするように工夫されている場合もあります。 ターゲットのアーキテクチャに依存させないなら、参考URLのようなコードになるかと思います(コンパイラには若干依存していますが)。

参考URL:
http://libc.blog47.fc2.com/blog-entry-31.html
すると、全ての回答が全文表示されます。
回答No.1

アルゴリズムはその通り。 実際の実装は(スピード稼ぎのため)機械語で書いてあったりします。

すると、全ての回答が全文表示されます。

関連するQ&A