strcpy関数は生成された配列に文字列データを🌞後から🌞代入するために使用されます ここでstrcpy関数をマスターしちゃおう😊

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

アレサ「



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



            文字列データを


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



            文字列データを


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



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


                              」



ソーラー「

     

    文字列データを


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


確か・・


strのchar型の配列宣言


char str[100];



実行したとします


すると


このchar型の配列strは


str[100]と


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


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


半角英数字1文字は


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


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


相当します


ええと


とりあえず


文字列データ"nikonikoparadise"



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


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

👇


#include <stdio.h>


int main(void) {


char str[100]="nikonikoparadise";


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


return 0;

}


ビルド実行結果


nikonikoparadise



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


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


char str[100]="nikonikoparadise";


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



そして


配列strに格納された文字列データをコマンドプロンプト画面に表示するには


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


strを


printf関数の第2引数に用いた


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

実行すればよいのでしたね」


アレサ「このプログラムの中の


文字列データ"nikonikoparadise"



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


char str[100]="nikonikoparadise";




char str[100];


str[100]="nikonikoparadise";



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



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


#include <stdio.h>


int main(void) {


char str[100];

str[100]= "nikonikoparadise";


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


return 0;

}


ビルド実行結果



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

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



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


アレサ「


文字列データ"nikonikoparadise"



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


char str[100]="nikonikoparadise";


の代わりに


char str[100];


str="nikonikoparadise";


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


そのときのプログラムは


次のようになります


#include <stdio.h>


int main(void) {


char str[100];

str= "nikonikoparadise";


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


return 0;

}


ビルド実行結果


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

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


ソーラー「なるほど


char型の配列strを


char str[100]="nikonikoparadise";


のように


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


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



アレサ「今度は


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 <stdio.h>

#include <string.h>


int main(void) {


char str[100];


strcpy_s(str, "nikonikoparadise");


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


return 0;

}


Visual studioの場合


ビルド実行結果


nikonikoparadise



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


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


アレサ「


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"


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




アレサ「このように


strcpy_s関数を使えば


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


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


ソーラー「なんで


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


strcpy_s(str, "nikonikoparadise");


を実行しなくても


char str[100]="nikonikoparadise";


を実行すれば


char型の配列strに


文字列データ


"nikonikoparadise"


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


アレサ「そのようにみえます


ですが


strcpy_s関数さんは


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


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


ソーラーさん」


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


アレサ「strcpy_s関数さんの



         基本的な性質として


生成した配列に


後から


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



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

👇


#include <stdio.h>

#include <string.h>


int main(void) {


char str[100];

strcpy_s(str, "nikonikoparadise");


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


return 0;

}


アレサ「このプログラムでは


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で共有
  • はてなブックマークでブックマーク

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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