gets() - ストリングの読み取り

標準

標準/拡張機能 C/C++ 依存項目

ISO C
POSIX.1
XPG4
XPG4.2
C99
Single UNIX Specification、バージョン 3
Language Environment

両方  

形式

#include <stdio.h>

char *gets(char *buffer);

#define _OPEN_SYS_UNLOCKED_EXT 1
#include <stdio.h>

char *gets_unlocked(char *buffer);

機能説明

標準入力ストリーム stdin から複数バイトを読み取り、それを buffer で指定される配列に入れます。行は、最初の改行文字 (¥n) または EOF まで (その文字を含む) のすべての文字で 構成されています。gets() 関数は、改行文字を廃棄し、最後に読み取られたバイトのすぐ後ろに NULL 文字 (¥0) が入ります。エラーが発生すると、buffer に保管される値は未定義なものになります。

gets() は、type=record または type=blocked を使用してオープンしたファイルでは サポートされません。

gets() には、すべての読み取り操作、つまり直後に書き込みを行う読み取りや、直後に読み取りを行う書き込みなどの場合と同じ制限があります。書き込みと後続の読み取りの間には、介入フラッシュまたは位置変更が 必要です。読み取りと後続の書き込みの間でも、EOF に達していない限り、介入フラッシュまたは位置変更が必要です。

gets_unlocked() は、スレッド・セーフでないことを除いて、機能的に gets() と 等価です。この関数をマルチスレッドのアプリケーション内で安全に使用できるのは、 flockfile() 関数または ftrylockfile() 関数のどちらかへの呼び出しが成功した後のように、 呼び出しスレッドが (FILE*) オブジェクトを所有している間に、この関数を呼び出す場合だけです。

戻り値

正常に実行された場合、gets() はその引数を戻します。

正常に終了しなかった場合は、gets() は NULL ポインターを戻し、エラーまたは読み取る文字のない EOF 状態を示します。

ferror() または feof() を使用すると、発生した条件を判別することができます。EOF に達するのは、データの最後のバイトを超えて読み取ろうとした場合だけです。 データの最後のバイトまで (最後のバイトを含む) 読み取ると、EOF 標識はオンになりません

CELEBG18
⁄* CELEBG18                                      

   This example gets a line of input from stdin.                                

 *⁄                                                                             
#include <stdio.h>                                                              
#define MAX_LINE 100                                                            
                                                                                
int main(void)                                                                  
{                                                                               
   char line[MAX_LINE];                                                         
   char *result;                                                                
                                                                                
   printf("Enter string:¥n");                                                   
   if ((result = gets(line)) != NULL)                                           
      printf("string is %s¥n",result);                                          
   else                                                                         
      if (ferror(stdin))                                                        
        printf("Error¥n");                                                      
}                                                                               

関連情報