strcpy関数 strcpy_s関数の基本について学んでみましょう strcpy_s関数を使えば生成された配列に後から文字列データを代入することができます

てんC「



      strcpy関数 strcpy_s関数の基本について学ぶ前に



            文字列データを


          配列(を用いてメモリ)に格納する方法と



            文字列データを


         ポインタ変数(を用いてメモリ)に格納する方法の



       2つの方法について学んでみませんか?(^_^)


                              」



ソーラー「

     

    文字列データを


          配列(を用いてメモリ)に格納する方法か・・


確か・・


strのchar型の配列宣言


char str[100];



実行したとします


すると


このchar型の配列strは


str[100]と


[]の中の要素数が100と記述されているので


100バイト分の文字列データを格納することができます


半角英数字1文字は


1バイト分のデータ量を持つので


100バイト分の文字列データとは半角英数字100文字分に


相当します


ええと


とりあえず


文字列データ"nikonikoparadise"



このchar型の配列strに格納してみます


そのプログラムはこちらとなります

👇


#include <iostream>


using namespace std;



int main() {


char str[100]="nikonikoparadise";


cout << str << "\n";


return 0;

}


ビルド実行結果


nikonikoparadise



ソーラー「文字列データ"nikonikoparadise"を


char型の配列strに格納するには


char str[100]="nikonikoparadise";


のような命令文を実行すればよかったね。」




てんC「このプログラムの中の


文字列データ"nikonikoparadise"



char型の配列strに格納する命令文


char str[100]="nikonikoparadise";




char str[100];


str[100]="nikonikoparadise";



2つに分けて記述することはできません



そのときプログラムは次のようになります


#include <iostream>


using namespace std;



int main() {


char str[100];


str[100] = "nikonikoparadise";



cout << str << "\n";


return 0;

}



ビルド実行結果




エラー (アクティブ) E0513 型 "const char *" の値を型 "char" のエンティティに割り当てることはできません

エラー C2440 '=': 'const char [17]' から 'char' に変換できません。



ソーラー「確か、そうだったよね」


てんC「


文字列データ"nikonikoparadise"



char型の配列strに格納する命令文


char str[100]="nikonikoparadise";


の代わりに


char str[100];


str="nikonikoparadise";


と記述することもできません


そのときのプログラムは


次のようになります


#include <iostream>


using namespace std;



int main() {


char str[100];


str = "nikonikoparadise";


cout << str << "\n";


return 0;

}


ビルド実行結果


エラー C3863 配列型 'char [100]' を割り当てることはできません。

エラー (アクティブ) E0137 式は変更可能な左辺値である必要があります


ソーラー「なるほど


char型の配列strを


char str[100]="nikonikoparadise";


のように


ひとまとめにして記述して初期化するのは


配列に文字列データを格納するときの基本的なルールってわけだね」



てんC「今度は


char str[100]="nikonikoparadise";



実行して


文字列データ"nikonikoparadise"



char型の配列strに格納するのではなく



strcpy関数、strcpy_s関数を用いて


文字列データ"nikonikoparadise"



char型の配列strに格納してみます」





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

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


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


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


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


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


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


プログラムの冒頭で


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


strcpy_s関数

または

strcpy関数


を使用するには


プログラムの冒頭で


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


(^_-)-☆



そのプログラムは次のようになります

👇

#include <iostream>

#include <string.h>

using namespace std;



int main() {


char str[100];


strcpy_s(str, "nikonikoparadise");


cout << str << "\n";


return 0;

}



ビルド実行結果


nikonikoparadise



ソーラー「 strcpy_s(str, "nikonikoparadise");


は何を意味しているのかな?」


てんC「


strcpy_sは


配列に文字列データを代入することができる関数であり


strcpy_s関数の第1引数には


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


記述し


strcpy_s関数の第2引数には


配列に代入したい文字列データを


記述するというルールになっています



strcpy_s(str, "nikonikoparadise");



strcpy_s関数の第1引数として記述されている


strは


文字列データを格納したい配列strの名前strであり


strは配列strの先頭の配列変数str[0]のアドレスを格納したポインタ変数となっています


strcpy_s関数の第2引数として記述されている


"nikonikoparadise"



配列strに格納したい文字列データとなっていて


strcpy_s(str, "nikonikoparadise");


が実行されると


char型の配列str[100]に文字列データ"nikonikoparadise"


が代入されることになります」




てんC「このように


strcpy_s関数を使えば


char型の配列に文字列データ


を代入することができます」


ソーラー「なんで


strcpy_s関数みたいなものがあるのかな?


strcpy_s(str, "nikonikoparadise");


を実行しなくても


char str[100]="nikonikoparadise";


を実行すれば


char型の配列strに


文字列データ


"nikonikoparadise"


を格納できるんじゃないかな?」


てんC「そのようにみえます


ですが


strcpy_s関数さんは


プログラムを作製するとき


たびたび用いられることになります


ソーラーさん」


ソーラー「ええ? そうなの?」


アレサ「strcpy_s関数さんの



         基本的な性質として


生成した配列に


後から


文字列データを代入できるというものがあります



次のプログラムをご覧ください

👇


include <iostream>

#include <string.h>

using namespace std;



int main() {


char str[100];


strcpy_s(str, "nikonikoparadise");


cout << str << "\n";


return 0;

}


ビルド実行結果


nikonikoparadise


てんC「このプログラムでは


char str[100];


により


char型の配列strを作製していますが


char str[100];


を実行して


配列strを作製しただけで


char str[100]="nikonikoparadise";


のように


文字列データ


"nikonikoparadise"



配列strに代入していません。


この後


str[100]="nikonikoparadise";


のように


文字列データ


"nikonikoparadise"



配列strに代入することはできません



ここで


strcpy_s関数を使えば



char str[100];


により生成された


char型の配列strに


後から


strcpy_s(str, "nikonikoparadise");


を実行することにより


文字列データ"nikonikoparadise"


を格納することができるのです



char str[100];


strcpy_s(str, "nikonikoparadise");


と記述して


char型の配列strを作製した後から


strcpy_s(str, "nikonikoparadise");


を実行することにより


char型の配列strに


文字列データ"nikonikoparadise"


を格納することができるのです(*^▽^*)」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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