Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

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() を使うことがベストプラクティスとされています。

  1. 【初心者向け】Pythonの関数とメソッドの違いを徹底解説!基本構文と実例つき

    関数(Function)とは 関数とは、特定のタスクを実行するためにまとめられたコードブロックです。独自のスコープを持ち、名前を指定して呼び出します。引数は0個でも複数個でもよく、処理の終了時に値を返すことも、返さないことも可能です。 関数の基本構文 def 関数名(引数1, 引数2, ...): # 関数本体 それでは、ごくシンプルな「sum」という関数を作成してみましょう(関数名は自由に付けてかまいません)。この関数は num1 と num2 という2つの引数を受け取り、その合計を返します。sum(5, 6) のように呼び出すと、11 が返されます。 def sum(num1

  2. 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. %