C言語のgetsを勉強したいな。
文字列の入力が可能な関数って聞いて使ってみたけど、エラーが出て使えないよ!
gets_sとの違いは何?
こちらの悩みを解決しますね。
この記事を書いている自分は、一日中プログラミングしていた過去がありました。現在、そこで学んだC言語について解説中です。
本記事の内容
・C言語で登場するgetsとは?
・getsを使う際に気を付けるべきこと
・getsでエラーが出る際の解決策
・gets_sとscanfの違いが分かるプログラム
C言語では割と基礎の部分なのでしっかり押さえましょう。
今回は、入出力関数の一つであるgetsの使い方を解説していきます。
gets関数とは?
getsとは、文字列を入力するための関数です。
文字列を扱うため、セットで配列が必要になります。以下が、「gets」のフォーマットです。
仮に、
char str[10]
のように配列を変数宣言するなら、
gets(str);
のようにして文字列をstrに代入できます。
getcharとの違いは以下の通りです。
✔getsとgetcharの違い
getchar・・・一文字を扱う
gets・・・文字列を扱う
「putchar」と「puts」の場合も同様ですね。
もし仮に、getcharで文字列を出力したいということがあったら、下の記事が役立つかもです。
gets関数を使う際に注意すべきこと
Visual Studioで「gets」を使う際には注意が必要です。
Visual Studioでgets関数をそのまま使うとエラーが出てしまいます。これを避けるための方法を3つ紹介します。
「#define _CRT_SECURE_NO_WARNINGS」を利用する
プログラムの先頭に
#define _CRT_SECURE_NO_WARNINGS
を書けば、エラーが出ずにプログラムを実行できます。
気が付いた方もいるかと思いますが、scanfと同じです。SDLチェックというやつです。何を言っているかよく分からない人は下の記事をご覧ください。
»C言語 入門 「scanf」の使い方!(エラー出た時の対処法も)
「gets」の代わりに「gets_s」を使う
「#define _CRT_SECURE_NO_WARNINGS」が長くて覚えられないという人は、「gets」の代わりに「gets_s」を使いましょう。
getsに似た関数ですが、gets_sを使用すれば、エラーは出ません。
SDLチェックを無効にする
SDLチェックを無効にすることでエラーを避けることができます。
プロジェクトを作成するときに、
[プロパティ] → [構成プロパティ] → [C/C++] → SDL チェックを無効
を選択すれば無効にできます。
gets_sとscanfの違いが分かるプログラム
gets_sとscanfの違いが分からない人が多いと思うので、解説します。
下のプログラムをご覧ください。(※説明の途中でputsが出てきます)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char str1[20];
char str2[20];
gets_s(str1);
puts("str1=");
puts(str1);
puts("\n");
scanf("%s", str2);
printf("str2=");
printf("%s", str2);
}
str1
str2
という2つの配列がありますね。
どちらの配列にも
Hello world!
と入力してみます。
出力してみますね。
この結果から分かることをまとめてみますね。
✔gets_sとscanfの違い
- gets_sで空白を入力できない(空白を入力しようとすると、入力が終了する)
この特徴は重要です。
たとえばファイルを読み取るときに、人の名前を空白で分けて入力すればそれぞれの変数に異なる文字列を代入できたりします。
ファイルの読み取りは、ファイル入出力関数を勉強するとできるようになります。
下の記事を参考にしてください。
≫C言語 入門 ファイル入出力関数を全て解説!(fopen)
putsとprintfの違い
おまけですが、putsとprintfの違いも分かるので解説しますね。
✔putsとprintfの違い
- putsで出力すると毎回改行されるけど、printfで出力すると改行されない
- putsで変数を出力するときは、変換書式、「”」(ダブルクオーテーション)、「,」(カンマ)が必要ない
この辺を知っていないとエラーが出てしまうので注意ですね。
もっと詳しく知りたい人は、下の記事を参考にしてください。
まとめ:getsの使い方徹底解説
入出力関数は種類が多いので、混乱しやすいポイントです。
何度も復習やプログラミングの練習を繰り返して身に付けましょう。
今回は以上です!
次は、構造体を勉強しましょう。
ではでは~👋
コメント