アプリ版:「スタンプのみでお礼する」機能のリリースについて

「strcpy(a, b);」



a=b;

とでは何が違うのですか。
「strcpy」は何を目的として使うものなのか、
良くわかっていませんので教えて下さい。

A 回答 (5件)

char *a,*b;


char buff[10]={ 'a', 'b', 'c', '\0' };
char message[10]= { 'h','e','l','l','o','\0'};
a=buff;b=message;
というような時
buff
[a][b][c][0][?][?][?][?][?][?]
message
[h][e][l][l][o][0][?][?][?][?]
というような感じでメモリに、文字が格納されています。?は、何が入っているかわからない状態です。
今、
aをbuffの先頭の位置([a])を表す変数として
bをmessageの先頭の位置([h])を表す変数とすると
a=bとは、
aをmessageの先頭の位置([h])を表すことにすることです。
strcpy(a,b)は、bの示す位置からaの示す位置にその内容を0が出てくるまでコピーする処理をします。
strcpy(a,b)を行うと
buff
[h][e][l][l][o][0][?][?][?][?]
message
[h][e][l][l][o][0][?][?][?][?]
の状態になります。
    • good
    • 1

ずばり、No.4さんの解答が正解です。



わかりやすく簡潔にまとめると、

●strcpy(a,b);
bのポインタが示すアドレスからNULL文字までを
aのポインタが示すアドレスに書き込む。

 ※aが示す先のアドレスに"hello"とNULL文字を
  書き込む。

●a=b
bのポインタが示すアドレスを
aのポインタに代入する。

 ※aもbも同じメモリ領域に書かれている
  "hello"を参照する。

ということになります。
    • good
    • 1

strcpy(a, b)ではcharに入った文字のコピーをするものではありません。


文字の配列、つまり文字列のコピーです。

char a, b;
char aa[3], bb[3];

a = 'A'; /* OK */
b = a; /* OK */
strcpy( b, a ); /* NG */

a = "AA"; /* NG */
strcpy( aa, "AA" ); /* OK */
strcpy( bb, aa ); /* OK */
    • good
    • 0

こんにちわ。


基本的には、a=bでもstrcpy(a, b)でも文字列のコピー
はできますが、a=bの場合、変数bの中身が書き換えら
れたら、aの中身も変わってしまいます。
詳しくは下記のサイトを参考にしてもらえばいいと
思います。

参考URL:http://homepage1.nifty.com/toshio-k/prog/c/strin …
    • good
    • 0

 えとですね。



 C言語では、「ポインタ」という考え方が非常に重要になってきます。
 ポインタというのは、要するに「表札」のことですね。

 たとえば、char *a; という宣言があったとき、その a という変数は、「どこそこに実体がある」という情報だけを持っています。
 実際には、実体は a という変数とは全く無関係な領域に独立して確保されているんです。

 なので、

 a = b;

 というのは、その「表札」だけをコピーする命令ということになり、a という変数の実体部分を書き換えると、b と実体を共有しているので、b の実体も書き換わってしまいます。

 対し、strcpy(a, b); だと、変数の実体そのものをコピーします。
 ゆえに、a の実体を書き換えても、b には影響しません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!