strcpy関数を使って文字列データを配列にコピーしてみよう



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

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


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


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


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


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


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


プログラムの冒頭で


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


strcpy_s関数

または

strcpy関数


を使用するには


プログラムの冒頭で


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


(^_-)-☆



それでは

strcpy_s関数を使って


        (^_-)-☆あらかじめ生成された(^_-)-☆


char型の配列


str

ars

arr


に文字列データを格納してみたいと思います


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

👇

#include <stdio.h>

#include <string.h>


int main(void) {


char str[100];

char ars[100];

char arr[100];


strcpy_s(str, "luckyで~す");

strcpy_s(ars, "mappyで~す");

strcpy_s(arr, "benriで~す");


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

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

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

return 0;

}


Visual studioの場合


コンパイル結果


luckyで~す

mappyで~す

benriで~す


ソーラー「このように


strcpy_s関数を使えば


配列に文字列データ


を格納することができるんだよ


さらに


プログラムに変更を加えてみるよ



#include <stdio.h>

#include <string.h>


int main(void) {


char str[100];

char ars[100];

char arr[100];


strcpy_s(str, "luckyで~す");

strcpy_s(ars, "mappyで~す");

strcpy_s(arr, "benriで~す");



strcpy_s(str, ars);

//👆ここに命令文を追加しました


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

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

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

return 0;

}


ビルド結果

(Visual studioの場合)


mappyで~す

mappyで~す

benriで~す




ソーラー「


strは配列

cpyはcopy

という意味があるんだよ


ここで登場した


strcpy_s(str, ars);


をよくみてよ



strcpy_sの第1引数にはstr

strcpy_sの第2引数にはars


が記述されているね


strは配列strのアドレスを格納したポインタ変数であり


arsは配列arsのアドレスを格納したポインタ変数なんだよ


このように


strcpy_sの第2引数には


文字列データだけでなく


文字列データを格納した配列のアドレスを格納したポインタ変数を


記述することができます



strcpy_s(str, ars);


が実行されると


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


"mappyで~す"



配列strにコピーされます


つまり


配列arsには文字列データ


"mappyで~す"


が格納されたまま


配列strに


文字列データ


"mappyで~す"


が代入(コピー)されているんだね。


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


の実行結果を見ても


配列arsに格納されているのは


文字列データ


"mappyで~す"


となっているのがわかるね(^_-)-☆


このように


strcpy_s関数には


配列に文字列データを代入するだけでなく


配列に格納された文字列データを


配列に代入する機能があるんだね」




アレサ「


ソーラーさん


今までのプログラムでは


strcpyでなくstrcpy_sが使用されていましたが


strcpyをつかっても


同じコンパイル結果がでるのですか?」


ソーラー「そうなんだよ。


今まで


でてきた


2つのプログラムの


strcpy_sの部分を


strcpyに書き換えても


全く同じコンパイル結果がえられるんだ。」


🍅


Visual studioでstrcpy関数をご使用の際は


#pragma warning(disable: 4996)を



プログラムの冒頭で記述してください



             (*´▽`*) solarplexussより


🍰 🍰 🍰 🍰 🍰 🍰 🍰 🍰 🍰 🍰 🍰 🍰


#pragma warning(disable: 4996)

#include <stdio.h>

#include <string.h>


int main(void) {


char str[100];

char ars[100];

char arr[100];


strcpy(str, "luckyで~す");

strcpy(ars, "mappyで~す");

strcpy(arr, "benriで~す");

//strcpy_s関数をstrcpy関数に書き換えています

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

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

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

return 0;

}


コンパイル結果

luckyで~す

mappyで~す

benriで~す



#pragma warning(disable: 4996)

#include <stdio.h>

#include <string.h>


int main(void) {


char str[100];

char ars[100];

char arr[100];


strcpy(str, "luckyで~す");

strcpy(ars, "mappyで~す");

strcpy(arr, "benriで~す");

//strcpy_s関数をstrcpy関数に書き換えています


strcpy(str, ars);


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

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

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

return 0;

}


ビルド結果

(Visual studioの場合)


mappyで~す

mappyで~す

benriで~す


ソーラー「つまり


strcpy(str, "luckyで~す");

strcpy(str, ars);


strcpy_s(str, "luckyで~す");

strcpy_s(str, ars);


のような記述の仕方は


strcpy

strcpy_s


に共通している記述の仕方なんだ。


これだけみると


strcpy関数

strcpy_s関数


には違いがないね。


でも


strcpy_s関数は


strcpy関数を強化したものだから


もう1つ


引数を持つことができるんだよ」


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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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