ポインタ変数を使ってメモリに格納された文字列データをstrcpy関数を使ってchar型の配列に代入(コピー)してみます

(´▽`*)(´▽`*)(´▽`*)(´▽`*)(´▽`*)(´▽`*)/

strcpy_s関数は統合開発環境Visual studio専用の関数となっており


他の統合開発環境ではお使いになれません


他の統合開発環境をお使いの方は


strcpy_s関数の代わりにstrcpy関数をお使いください。


またstrcpy関数はそのままでは


統合開発環境Visual studioでは使用できませんので


プログラムの冒頭で


#pragma warning(disable: 4996)を記述してください


strcpy_s関数

または

strcpy関数


を使用するには


プログラムの冒頭で


ヘッダファイル<string.h>をインクルードします


(^_-)-☆




ソーラー「こんにちは😊


今日も元気にすすんで行こうよ アレサ」


アレサ「はいですの ソーラーさん」


ソーラー「


まずは


char*型のポインタ変数aを使って


文字列データ


"快晴で~す"


をメモリに格納してみます



そのプログラムはこちらです

👇

#include <stdio.h>

#include <string.h>


int main(void) {


char* a = "快晴で~す";


printf("%s\n", a);


return 0;

}


Visual studioの場合


コンパイル結果


快晴で~す


ソーラー「このように


char*型のポインタ変数aを使って


文字列データ


"快晴で~す"


をメモリに格納することができました


このとき


char*型のポインタ変数aを使って


メモリに格納された


文字列データ


"快晴で~す"



strcpy_s関数をつかって


char型の配列に代入することができます


その様子を示すプログラムはこちらとなりま~す

👇


#include <stdio.h>

#include <string.h>


int main(void) {


char* a = "快晴で~す";


printf("%s\n", a);


char str[100];


strcpy_s(str,a);


printf("%s\n", str);


return 0;

}


Visual studioの場合


コンパイル結果


快晴で~す

快晴で~す


ソーラー「このプログラムでは


char* a = "快晴で~す";


を実行することにより


char*型のポインタ変数aを使って


メモリに


文字列データ


"快晴で~す"


が格納されています


そのことが


printf("%s\n", a);


の実行結果が


快晴で~す


となっていることからも分かります


次に


char型の配列宣言


char str[100];


の実行により


char型の配列strが生成されています。


そして


strcpy関数の第1引数に


char型の配列strのアドレスを格納したポインタ変数


str


を記述し


strcpy関数の第2引数に


文字列データ"快晴で~す"


をメモリに格納したときのポインタ変数a


を記述した


strcpy_s(str,a);



実行されると


char型の配列strに


文字列データ


"快晴で~す"


が格納されることになります



そのことが


strcpy_s(str,a);


の次の命令文


printf("%s\n", str);


の実行結果が


快晴で~す


となっていることからも分かります


printf("%s\n", str);


を実行すれば


配列strに格納されている文字列データ


"快晴で~す"


をコマンドプロンプト画面に


快晴で~す


として表示することができるのでした


このとき


char型の配列strに


char str[100]="みかんで~す";



文字列データ 


"みかんで~す"


があらかじめ格納されていても


strcpy_s(str,a);


を実行することにより


文字列データ


"快晴で~す"



char型の配列strに上書きして


格納することができます


そのことを示すプログラムは


次のようになります


👇

#include <stdio.h>

#include <string.h>


int main(void) {


char* a = "快晴で~す";


printf("%s\n", a);


char str[100]="みかんで~す";


printf("%s\n", str);


strcpy_s(str, a);


printf("%s\n", str);


return 0;

}


ビルド実行結果


快晴で~す

みかんで~す

快晴で~す


ソーラー「


char型の配列strに


文字列データ "みかんで~す"


が格納されていますが


strcpy_s(str, a);


が実行されることにより


char型の配列strに


ポインタ変数aによってメモリに格納されている


文字列データ


"快晴で~す"



上書きして格納されます


printf("%s\n", str);


の実行結果が


strcpy_s(str, a);


の実行の前では


みかんで~す


だったのが


strcpy_s(str, a);


の実行の後では


快晴で~す


となっていることからも


char型の配列strに格納されている文字列データが


上書きされているのがわかります」


ソーラー「このとき


char* a = "快晴で~す";


を実行することにより


char*型のポインタ変数aを使って


メモリに


格納された文字列データ


"快晴で~す"



そのメモリに保存されたままとなっています


つまり


そのメモリにも


文字列データ


"快晴で~す"


が格納されていて


char型の配列strにも


文字列データ


"快晴で~す"


が格納されている状態となっています


そのメモリに格納されている


文字列データ


"快晴で~す"



char型の配列strに



           コピー(copy)


されたというわけです


strcpy_s関数の名前通り


配列に


string(文字列)



copy


されたというわけです」


ソーラー「配列に文字列データを代入できるよう


C言語の作者は


便利なstrcpy_s関数をつくったんだね」








  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る