C言語のgets_s関数の使い方やメリットについてわかりやすく詳しく解説

gets_s関数は、文字列の入力やファイルの読み込みに使用される便利な関数です。

この記事では、C言語のgets_s関数の使い方について詳しく解説します。

目次から探す

gets_s関数とは

gets_s関数は、C言語で文字列を入力するための関数です。

この関数は、標準入力から文字列を受け取り、指定したバッファに格納します。

gets_s関数の概要

gets_s関数は、以下のような形式で使用します。


char* gets_s(char* str, rsize_t n);

この関数は、引数として2つのパラメータを受け取ります。

  • str: 文字列を格納するためのバッファへのポインタ
  • n: バッファのサイズ

gets_s関数は、標準入力から改行文字(‘\n’)までの文字列を受け取り、指定したバッファに格納します。

バッファのサイズを超える文字列が入力された場合、バッファオーバーフローが発生し、予期しない動作やセキュリティ上の脆弱性が生じる可能性があります。

gets_s関数の特徴

gets_s関数は、以下の特徴を持っています。

  1. バッファオーバーフローの防止

gets_s関数は、バッファのサイズを指定することで、バッファオーバーフローを防止します。

バッファのサイズを超える文字列が入力された場合、入力を中止し、エラーを返します。

  1. 文字列の終端文字の自動追加

gets_s関数は、入力された文字列の末尾に自動的に終端文字(‘\0’)を追加します。

これにより、文字列の終端を明示的に指定する必要がありません。

以下に、gets_s関数の使用例を示します。


#include <stdio.h>
int main() {
    char str[10];
    gets_s(str, sizeof(str));
    printf("入力された文字列: %s\n", str);
    return 0;
}

上記のコードでは、10文字分のバッファを用意し、gets_s関数を使って文字列を入力しています。

入力された文字列は、そのまま出力されます。

なお、gets_s関数はC11規格で導入された関数であり、一部のコンパイラではサポートされていない場合があります。

そのため、代わりにfgets関数を使用することも検討してください。

gets_s関数の使用例

以下に、gets_s関数の使用例を示します。


#include <stdio.h>
int main() {
    char str[100];
    
    printf("文字列を入力してください: ");
    gets_s(str, sizeof(str));
    
    printf("入力された文字列は: %s\n", str);
    
    return 0;
}

上記のプログラムでは、ユーザーに文字列の入力を促し、gets_s関数を使って入力された文字列を取得しています。

取得した文字列は、そのまま出力されます。

このプログラムを実行すると、以下のような結果が得られます。

文字列を入力してください: Hello, World!
入力された文字列は: Hello, World!

gets_s関数は、オーバーフロー対策が施されたgets関数であるため、基本的にはgets関数ではなくgets_s関数を使うようにしましょう。

目次から探す