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関数
は、以下の特徴を持っています。
- バッファオーバーフローの防止
gets_s関数
は、バッファのサイズを指定することで、バッファオーバーフローを防止します。
バッファのサイズを超える文字列が入力された場合、入力を中止し、エラーを返します。
- 文字列の終端文字の自動追加
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関数
を使うようにしましょう。