開発環境
- OS X Lion - Apple(OS)
- Emacs、BBEdit - Bare Bones Software, Inc. (Text Editor)
- プログラミング言語: C
- Clang (コンパイラ)
プログラミング言語C 第2版 ANSI規格準拠 (B.W. カーニハン D.M. リッチー (著)、 石田 晴久 (翻訳)、共立出版)の第5章(ポインタと配列)、5.11(関数へのポインタ)、演習5-14を解いてみる。
その他参考書籍
- プログラミング言語Cアンサー・ブック 第2版 (クロビス・L.トンド、スコット・E.ギンペル(著)、矢吹 道郎(翻訳))
演習 5-14.
コード
sample.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXLINES 5000 #define MAXLEN 1000 #define MAXSTOR 5000 #define ALLOCSIZE 10000 void tail(int argc, char *argv[]); int readlines(char *lineptr[], int nlines); int my_getline(char *, int); char *alloc(int); char allocbuf[ALLOCSIZE]; char *allocp = allocbuf; int main(int argc, char *argv[]) { tail(argc, argv); return 0; } void tail(int argc, char *argv[]) { int n, nlines, i; char *lineptr[MAXLINES]; if (argc == 1 || (*++argv)[0] != '-') { n = 10; } else n = atoi(&(*argv)[1]); if ((nlines = readlines(lineptr, MAXLINES)) >= 0) { if (n > nlines) n = nlines; for (i = nlines - n; i < nlines; i++) printf("%2d行目、%2d行: %s\n", (n + 1) - (nlines - i), i + 1, lineptr[i]); } else printf("error: input too big\n"); } int readlines(char *lineptr[], int maxlines) { int len, nlines; char *p, line[MAXLEN]; nlines = 0; while ((len = my_getline(line, MAXLEN)) > 0) { if (nlines >= maxlines || (p = alloc(len)) == NULL) return -1; else { line[len - 1] = '\0'; strcpy(p, line); lineptr[nlines++] = p; } } return nlines; } int my_getline(char *s, int lim) { int c; char *t = s; while (--lim > 0 && (c = getchar()) != EOF && c != '\n') *s++ = c; if (c == '\n') *s++ = c; *s = '\0'; return s - t; } char *alloc(int n) { if (allocbuf + ALLOCSIZE - allocp >= n) { allocp += n; return allocp - n; } else return 0; }
入出力結果(Terminal)
$ cat sample.txt Ah Love! could you and I with Fate conspire To grasp this sorry Scheme of Things entire, Would not we shatter it to bits -- and then Re-mould it nearer to the Heart's Desire! 20 11 19 12 18 13 17 14 15 $ cat sample.txt | ./a.out 11 12 13 14 15 17 18 19 20 Ah Love! could you and I with Fate conspire Re-mould it nearer to the Heart's Desire! To grasp this sorry Scheme of Things entire, Would not we shatter it to bits -- and then $ cat sample.txt | ./a.out -r Would not we shatter it to bits -- and then To grasp this sorry Scheme of Things entire, Re-mould it nearer to the Heart's Desire! Ah Love! could you and I with Fate conspire 20 19 18 17 15 14 13 12 11 $ cat sample.txt | ./a.out -n Ah Love! could you and I with Fate conspire Would not we shatter it to bits -- and then To grasp this sorry Scheme of Things entire, Re-mould it nearer to the Heart's Desire! 11 12 13 14 15 17 18 19 20 $ cat sample.txt | ./a.out -r -n 20 19 18 17 15 14 13 12 11 Re-mould it nearer to the Heart's Desire! To grasp this sorry Scheme of Things entire, Would not we shatter it to bits -- and then Ah Love! could you and I with Fate conspire $ cat sample.txt | ./a.out -n -r 20 19 18 17 15 14 13 12 11 Re-mould it nearer to the Heart's Desire! To grasp this sorry Scheme of Things entire, Would not we shatter it to bits -- and then Ah Love! could you and I with Fate conspire $ cat sample.txt | ./a.out -nr 20 19 18 17 15 14 13 12 11 Re-mould it nearer to the Heart's Desire! To grasp this sorry Scheme of Things entire, Would not we shatter it to bits -- and then Ah Love! could you and I with Fate conspire $ cat sample.txt | ./a.out -rn 20 19 18 17 15 14 13 12 11 Re-mould it nearer to the Heart's Desire! To grasp this sorry Scheme of Things entire, Would not we shatter it to bits -- and then Ah Love! could you and I with Fate conspire $ cat sample.txt | ./a.out -a error: option a 11 12 13 14 15 17 18 19 20 Ah Love! could you and I with Fate conspire Re-mould it nearer to the Heart's Desire! To grasp this sorry Scheme of Things entire, Would not we shatter it to bits -- and then $
0 コメント:
コメントを投稿