C言語におけるscanf()とgets()の違いを徹底解説
C言語には、外部ソースから入力を受け取り、システムに渡すための関数として scanf() と gets() が定義されています。どちらも標準入力を扱う関数ですが、動作の仕組みにはいくつかの重要な違いがあります。
scanf() と gets() の主な違い
以下の表は、C言語における scanf() と gets() の重要な違いをまとめたものです。
| 番号 | 比較項目 | scanf() 関数 | gets() 関数 |
|---|---|---|---|
| 1 | 定義 | キーボードからの入力を読み取り、指定された書式指定子に従って格納します。空白文字・改行・EOFに遭遇すると読み取りを終了します。 | 改行またはEOFに遭遇するまで、キーボードからの入力を受け取ります。空白文字も入力の一部として扱われます。 |
| 2 | 空白文字の扱い | 空白文字は入力文字として扱われず、入力の途中に空白文字が現れると、その時点で外部ソースからの読み取りを停止します。 | 空白文字も入力文字として扱われ、入力の途中に空白文字が現れても読み取りを中断せず、そのまま入力ソースから読み取りを続けます。 |
| 3 | 構文 | 書式文字列と、変数のアドレスのリストを引数に取ります。 例: scanf("%d", &number); | 受け取った値を格納する変数名を引数に取ります。 例: gets(name); |
| 4 | データ型 | 異なるデータ型の複数の値を読み取ることができます。 | 文字列データのみを受け取ることができます。 |
gets() を使用する際の注意点
gets() は入力の長さを制限できないため、バッファオーバーフローを引き起こす危険性があります。このため、C11規格では gets() は標準ライブラリから削除され、代わりに安全な fgets() の使用が推奨されています。実用的なプログラムでは、scanf() や fgets() を使うことがベストプラクティスとされています。
-
【初心者向け】Pythonの関数とメソッドの違いを徹底解説!基本構文と実例つき
関数(Function)とは 関数とは、特定のタスクを実行するためにまとめられたコードブロックです。独自のスコープを持ち、名前を指定して呼び出します。引数は0個でも複数個でもよく、処理の終了時に値を返すことも、返さないことも可能です。 関数の基本構文 def 関数名(引数1, 引数2, ...): # 関数本体 それでは、ごくシンプルな「sum」という関数を作成してみましょう(関数名は自由に付けてかまいません)。この関数は num1 と num2 という2つの引数を受け取り、その合計を返します。sum(5, 6) のように呼び出すと、11 が返されます。 def sum(num1
-
Pythonのraw_input()とinput()の違いとは?わかりやすく解説
Python 2では、ユーザーからのキーボード入力を受け取るために「raw_input()」と「input()」という2つの組み込み関数が用意されていました。名前は似ていますが、この2つには動作面で重要な違いがあります。 raw_input()関数の基本的な使い方 raw_input()は、引数として渡した文字列をプロンプト(入力を促すメッセージ)として画面に表示し、ユーザーが入力した内容を取得します。そして、入力されたデータは必ず文字列(str型)として返されるのが特徴です。 name = raw_input(What is your name? ) print Hello, %s. %