消えた gets を復活させる呪文  

    2015/07/05
  古いソースコードの中 gets を使っているものがあった。今さら該当部分のコードを、
  書き換えるのも辛いし、 C11 では削除されているので、なお今さらの感が否めない。

  対応方法の考え方の一つとして、下記の手法を残しておく事にする。
  C11 以前のコンパイラー用の stdio.h では、内で gets が宣言されているので、
  #include <stdio.h> の後に、2行を追加する。

inline char *gets2fgets(char *b){register int i; if(b)for(i=0;b[i]&&(b[i]=(b[i]=='\n')?0:b[i]);i++); return b;}
#define gets(b) gets2fgets(fgets(b,sizeof(b),stdin))

使用例
#include <stdio.h>

inline char *gets2fgets(char *b){register int i; if(b)for(i=0;b[i]&&(b[i]=(b[i]=='\n')?0:b[i]);i++); return b;}
#define gets(b) gets2fgets(fgets(b,sizeof(b),stdin))

int main()
{
char buff[8];   // 配列の大きさ【 sizeof(buff) 】をコンパイラーが計算できる事が使用条件

    gets(buff);
    printf( "'%s'\n", buff );

    return 0;
} 

実行結果 $ gcc -o mgets mgets.c $ ./mgets 123456789abcd '1234567' $ $ ./mgets 1234 '1234' $


あとがき
  この手の書き捨てコードは、自分自身が何処か別の場所で、コピペして使う事を目的(前提)に公開している。
  もし流用する場合は、不具合等を自己解決できる事を前提に使っていただきたい。



go to TopPage go to CategoryTop