🌞scanf関数を使って空白を含んだ文字列データ"Hello nyannko"を配列にとりこむことはできませんがgets関数(get_s関数)をもちいればそれが可能となります🌞 


🌞scanf関数を使って空白を含んだ文字列データ"Hello nyannko"を配列にとりこむことはできませんがgets関数(get_s関数)をもちいればそれが可能となります🌞 




         😊つ🍎づ🍎き😊です🍎



🐤_  🐤_


#pragma warning(disable: 4996)


#include <stdio.h>


int main(void)

{

char hairetu[10000];

scanf("%s",hairetu);

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


return 0;

}


このプログラムを実行して


アンダーバー

_


が表示される


入力待機中のコマンドプロンプト画面で


Hello nyannko 


とうちこむと・・・・・


プログラムの実行結果


Hello nyannko (と入力すると)

Hello (だけが表示されます)


ソーラー「つまり


scanf関数では


空白部分を含んだ文字列データ"Hello nyannko"を


一塊の文字列データとして


char型の配列にそのまま格納することはできないんだ。


どうやったら文字列データ"Hello nyannko"を


char型の配列に空白スペースを含んだそのままの形で


格納することができるのか?


👉


そんな 貴女にチャレンジ ジョイ


この台所洗剤をつかえば


しつこい油汚れもすっきりと落ちます。


👉



アレサ「ソーラーさん



この場合ではgets関数をもちいれば


文字列データ"Hello nyannko"を


そのまま


char型の配列に格納することができます。


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


#include <stdio.h>


int main(void)

{

char hairetu[10000];

gets(hairetu);

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


return 0;

}


プログラムの実行結果


(EAZY IDECの場合)


Hello nyannko(と入力すると)

Hello nyannko(と表示されます)


プログラムの実行結果


(Visual Studioの場合)


エラー (アクティブ) E0020 識別子 "gets" が定義されていません

エラー C3861 'gets': 識別子が見つかりませんでした



ソーラー「?


Visual Studioではgets関数を使用することはできないんだね」


アレサ「はい


gets関数はVisual Studioでは使用できないのです


(gets関数はセキュリティの問題があるため(後述されます😊)

2011年に改訂されたC11規格以降の標準Cライブラリでは廃止されているので

最新のVisual Studioでは使用できません

ということは

EAZY IDECは2011年より前に作製された統合開発環境ということになります)




そこで


Visual Studioでは


Visual Studio専用に開発された


gets_s関数を使用することになります



#include <stdio.h>


int main(void)

{

char hairetu[10000];

gets_s(hairetu);

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


return 0;

}


プログラムの実行結果


(EAZY IDECの場合)


コンパイラに内部エラーが発生しました。

undefined symbol 'gets_s'



プログラムの実行結果


(Visual Studioの場合)


Hello nyannko(と入力すると)

Hello nyannko(と表示されます)


ソーラー「今度は


統合開発環境EAZY IDECでは


gets_s関数は定義されていませんと


エラーが表示されたね。


面白いな・・


ところで


gets_s関数の仕組みはどうなっているのかな?」


アレサ「gets_s関数のgetsは


get sentense(文字列)


の略で


文字列データを


char型の配列に格納する働きがあります。


gets_sの右側のsはsecurity のsです


char型の配列に文字列データを格納したい場合は


gets_s(hairetu)


のように


データを格納したい配列の配列名を


gets_s関数の引数として書き込んで使用します。」


ソーラー「それだけ? とっても簡単だね」


アレサ「はい😊 この gets_s関数


gets_s(hairetu);


が実行されると


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


アンダーバー_が表示されます


キーボードからの文字入力をうけつけているのですね


文字は1文字だけでなく複数の文字を入力することができます


文字列を入力した後


Enterキーをおせば文字列データ入力は終了し


配列hairetuに文字列データが入力されることになります


Hello nyannko



apple lemon beatless


のように


文字列データの1部に空白を含んでいても


そのまま


文字列データを


char型の配列に格納することができます。


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



#include <stdio.h>


int main(void)

{

char hairetu[10000];

gets_s(hairetu);

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


return 0;

}


プログラムの実行結果


(Visual Studioの場合)


apple lemon beatless(と入力すると)

apple lemon beatless(と表示されます)


アレサ「


apple lemon beatless


と入力してEnterキーをおすと


文字列データ"apple lemon beatless"



空白スペースとともに


char型の配列hairetuに格納され


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


文字列に空白スペースがふくまれている


apple lemon beatless


が表示されます」


ソーラー「これは便利な関数だね


文字列に空白スペースを含んでいるものは多いから


gets_s関数はこれからたくさん使用しそうだね。」














💖ここでコマーシャル!💖





新未来型面白アニメ



            『Beatless』


よろしくね!


アレサの友達もたくさん出てきます
































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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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