C言語のgets関数を使う
auです。
色々なサイトを見た際にgets関数を使っているところが多かったので調べてみました。
gets関数
gets関数は標準入力を受け付ける関数です。gets関数を利用すると1行の文がそのまま格納されます。他にはscanfなどもあります。gets関数に対してscanfは空白を入力するとそれまでの行で格納されてしまうので、gets関数とは使い方が異なります。学校ではscanfしか習わなかったので、なぜgets関数を習わなかったのか不思議でしたが、あることを知ってから少しだけ納得しました。
あることとは、gets関数の場合は宣言したchar型の範囲を超えても入力ができてしまうことです。それに対し、scanfは範囲が超えた場合は表記されずに「*** stack smashing detected ***: ./a.out terminated
Aborted (core dumped)」と返されます。
#include <stdio.h> int main(void) { char ch[5]; gets(ch); printf("get: %s\n", ch); char ch2[5]; scanf("%s", ch); printf("scanf: %s\n", ch); return 0; } // 実行結果 abcdefghijklmg get: abcdefghijklmg abcdefghijklmg scanf: abcdefghijklmg *** stack smashing detected ***: ./a.out terminated Aborted (core dumped)
メモリを超えて入力をするとエラーや予期せぬ動作の原因となるため、scanfを使うほうがいいと思います。