C言語プログラミング 9/18

記事
IT・テクノロジー
gets関数の置き換え関数を作ってモジュール化してみました。
遊びなので、ソースコードの保証はしません。

// getsrpl.h
#ifndef _GETSRPL_H_
#define _GETSRPL_H_

//プロトタイプ宣言
char *getsrpl(char *str, int len);
#endif //_GETSRPL_H

//getsrpl.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "getsrpl.h"

char *getsrpl(char *str, int len){
    int n;
    int c;
    //読み取りエラーの発生時や、配列に1文字も読み取らなかった場合
    if( fgets(str, len, stdin) == NULL ){
        return NULL;
    }
    n = strlen(str);
    if( str[n-1] == '\n' ){ //改行文字が余計に格納されている場合
        str[n-1] = '\0';
    }
    else{ //オーバーフローした場合読み捨てる
        while(1){
            c = getchar();
            if(c == '\n'){
                break;
            }
            else if(c == EOF){
                if( feof(stdin) ){ //終端
                    break;
                }
                else if( ferror(stdin) ){ //入力エラー
                    return NULL;
                }
            }
            else{
            }
        }
    }
    return str;
}

いろいろ調べて見よう見まね的に、ですが・・・。終端処理がいまいちピンと来ていません。
十分大きなバッファ用意してfgetsの方が断然安心ですね(笑


サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す