C言語 エラーを想定する

この時のコメントでNKさんは以下のようにおっしゃっていた。

”C言語の発想は「プログラマを信用して任せます」ということです。うまく書けば速いですが、正しく使いこなせるようになるまでが大変です。大衆車とF1カーの違いといいましょうか。”

まさにその通りで、C言語は「ミス」があってもそのまま強行してしまう場合が散見されます。(配列オーバーとか…)

…ということで、先ほどのプログラムも入力ミスを想定した追記が必要。

#include <stdio.h>
#include <string.h>	//strcat()を使うため
#include "Person.h"	//さっきのコードを参照
#define MAX_LENGTH 600
#define FILE_LENGTH 100

main  () {
	FILE *fp;				//ファイルポインタ
	char *p;				//終了判定のためのポインタ
	char str[MAX_LENGTH];		//ファイル読込用の領域
	char fname[FILE_LENGTH];		//ファイル名格納用文字列
	char input[MAX_LENGTH*4];		//読み込んだ行を格納する変数

	puts("Please input a file name.");
	gets(fname);				//ファイル名をfnameに代入
	fp = fopen(fname, "r");			//読込モードでfnameを開く

	if (fp == NULL) {
		puts("The file don't exist!");
	} else {
		p = fgets(str, MAX_LENGTH, fp);	//引数は読込用文字列, 最大読込長, ファイルポインタ
		while (p != NULL) {
			printf("%s",str);				//読み込んだ行を表示
			strcat(input, str);			//読み込んだ行をinputに格納
			p = fgets(str, MAX_LENGTH, fp);	//再び一行読み込む
			}
	}
	fclose(fp);					//ファイルを閉じる
}

漏れなく指定するのが、マニュアル車(C言語)操作の鉄則ですね…。