/* EUC_JP, LFのみ */ #include #include #include #define MAX_LINE 100 char **loadfile (char *path) { FILE *fp; char **array = NULL; char *buf; do{ int i; long size; /* パスのテスト */ if(!path || !*path) break; /* ファイルサイズを調べる */ if((fp = fopen(path, "rb")) == NULL) break; if(fseek(fp, 0L, SEEK_END)) break; size = ftell(fp); rewind(fp); /* 100行分のポインタ + ファイルの読み込みに必要なメモリを確保 */ array = (char **)malloc(sizeof(char) * (size + 1) + sizeof(char *) * (MAX_LINE + 1)); if(!array) break; buf = (char *)&array[MAX_LINE+1]; /* 前半は配列で利用 */ /* ファイルの内容を読み込み */ if(fread(buf, sizeof(char), size, fp) < size) break; buf[size] = '\0'; /* ファイルの中身を行単位で分割 */ array[0] = strtok(buf, "\r\n"); if(!array[0]) break; i = 0; while(i < MAX_LINE && array[i++]) array[i] = strtok(NULL, "\r\n"); /* 終端 */ array[i] = NULL; }while(0); if(fp) fclose(fp); return array; } int main(int argc, char *argv[]) { int i; char **array; array = loadfile(argv[1]); if(!array) return 0; for(i = 0; array[i]; i++) printf("%02d: %s\n", array[i]); free(array) return 0; }