No.4ベストアンサー
- 回答日時:
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][?][?][?][?]
の状態になります。
No.5
- 回答日時:
ずばり、No.4さんの解答が正解です。
わかりやすく簡潔にまとめると、
●strcpy(a,b);
bのポインタが示すアドレスからNULL文字までを
aのポインタが示すアドレスに書き込む。
※aが示す先のアドレスに"hello"とNULL文字を
書き込む。
●a=b
bのポインタが示すアドレスを
aのポインタに代入する。
※aもbも同じメモリ領域に書かれている
"hello"を参照する。
ということになります。
No.3
- 回答日時:
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 */
No.2
- 回答日時:
こんにちわ。
基本的には、a=bでもstrcpy(a, b)でも文字列のコピー
はできますが、a=bの場合、変数bの中身が書き換えら
れたら、aの中身も変わってしまいます。
詳しくは下記のサイトを参考にしてもらえばいいと
思います。
参考URL:http://homepage1.nifty.com/toshio-k/prog/c/strin …
No.1
- 回答日時:
えとですね。
C言語では、「ポインタ」という考え方が非常に重要になってきます。
ポインタというのは、要するに「表札」のことですね。
たとえば、char *a; という宣言があったとき、その a という変数は、「どこそこに実体がある」という情報だけを持っています。
実際には、実体は a という変数とは全く無関係な領域に独立して確保されているんです。
なので、
a = b;
というのは、その「表札」だけをコピーする命令ということになり、a という変数の実体部分を書き換えると、b と実体を共有しているので、b の実体も書き換わってしまいます。
対し、strcpy(a, b); だと、変数の実体そのものをコピーします。
ゆえに、a の実体を書き換えても、b には影響しません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Evernote Simplenoteのコピー&ペースト 1 2022/05/17 14:09
- Excel(エクセル) Excelの文字列を数字に変換する方法について 6 2023/07/31 21:18
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Excel(エクセル) 関数を用いて表示したセルの内容を、見えている形でコピーする方法 2 2022/09/14 16:36
- Visual Basic(VBA) excelにて、特定の列に数字入力してあれば、入力してある行コピーして 別ファイルに張り付ける 2 2022/08/11 05:33
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) 該当セルの値を別ブックのシート名と一緒であればコピーしてほしい 1 2022/11/10 20:12
- Word(ワード) ワードアートの袋文字のコピー 1 2023/01/08 16:03
- Photoshop(フォトショップ) photoshopの文字入力問題 1 2022/12/30 16:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語にて構造体のメンバがNULL...
-
C言語のintとcharの違いってな...
-
WM_CHAR or WM_KEYDOWN の「wPa...
-
WritePrivateProfileString
-
文字列のswap
-
char*を初期化したいのですが
-
char AA[]{"全角文字"};から"全...
-
char 文字列型 の表現範囲が-12...
-
fstream型オブジェクトを関数の...
-
動的メモリの初期化方法について。
-
ポインタで詰まりました;
-
CStringからchar*への型変換に...
-
Run-Timeエラーの原因に関して...
-
C言語を用いた環境変数の作成/...
-
csvファイルを構造体に格納した...
-
[C] 構造体メンバーのカンマ区...
-
ポインタを使用 [数字列を数値...
-
const char* s1とただのchar s1...
-
fgetc( )の戻り値はなぜ整数??
-
std::stringクラスのc_str()で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
char*を初期化したいのですが
-
C言語のintとcharの違いってな...
-
CStringからchar*への型変換に...
-
C言語にて構造体のメンバがNULL...
-
小数点入りの文字列をfloat型に...
-
C言語のプログラムについてです
-
strcat関数を自作したいです
-
fstream型オブジェクトを関数の...
-
new charとnew char[N]の違いは?
-
DWORDとcharの変換
-
文字列の途中から途中までを抽出
-
char 文字列型 の表現範囲が-12...
-
const char* s1とただのchar s1...
-
wsprintf( ポインタ , "%d" , "...
-
c言語でポインタ変数を用いた配...
-
char型にint型の数値を代入する。
-
C言語で文字列をかえす正しい書...
-
C++17で、unsigned char * 配列...
-
共用体について
-
エクセルのMID関数は、C言語では?
おすすめ情報