>>237
これで早くなってるんじゃないかな?
#include <stdio.h>
#include <string.h>
#define DICT "web2"
#define DIVNUM 50 // 適当な数
int main(int argc, char **argv) {
    FILE *fp;
    size_t wlen, filesize, pos, pos_prev;
    char buff[4096];

    if (argc == 1) return 1;
    wlen = strlen(argv[1]);
    if ((fp = fopen(DICT, "r")) == NULL) return 2;
    fseek(fp, 0L, SEEK_END);
    filesize=ftell(fp);
    fseek(fp, 0L, SEEK_SET);
    for(pos=pos_prev=0;pos<filesize;pos_prev=pos,pos+=filesize/DIVNUM+1) { // +1 で無限ループ回避
        fseek(fp, pos, SEEK_SET);
        fgets(buff, sizeof(buff), fp);
        if(fgets(buff, sizeof(buff), fp)==NULL) break;
        if(strncasecmp(buff, argv[1], wlen)>=0) break;
    }
    fseek(fp, pos_prev, SEEK_SET);
    while (fgets(buff, sizeof buff, fp)) {
        int n = strncasecmp(buff, argv[1], wlen);
        if (n == 0) fputs(buff, stdout);
        else if (n > 0) break;
    }
    fclose(fp);
    return 0;
}