#include #include #include #define MAXSTR 10 /* 名前の長さ */ #define MAXENT 10 /* 件数 */ typedef struct { char *name_ptr; long year; long month; long day; } CARD; int con_gets2(char* str, int buf_size); void keyflush(int input); /* ----- 滅入ん ----- */ void main() { int i; char *list[MAXENT]; char *p; CARD *card; for (i = 0; i < 5; i++) { p = malloc(sizeof(CARD)); printf("malloc[%p]\n", p); *(list + i) = p; card = (CARD *)(*(list + i)); card->year = 1969 + i; } for (i = 0; i < 5; i++) { card = (CARD *)(*(list + i)); printf("%d\n", card->year); printf("[%p], [%p]\n", card, (*(list + i))); } for (i = 0; i < 5; i++) { p = (*(list + i)); printf("free[%p]\n", p); free(p); } } /* ----- 関数の定義 ----- */ /* ---- キーボードから文字列を入力 ---- */ /* 行頭で '0' が入力されると EOF を返す */ /* それ以外は 1 を返す */ int con_gets2(char* str, int buf_size) { int cnt = 0; int flag = 1; char ch; while ((ch = getchar()) != '\n') { /* '\n' が出現するまで繰り返し */ if (flag && ch == '0') { /* 行頭で '0' が入力された場合 */ keyflush(ch); return EOF; } else { flag = 0; } if (cnt < buf_size - 1) { /* 改行待ちなんでバッファクリアは考慮していない */ *(str + cnt) = ch; cnt = cnt + 1; } } *(str + cnt) = '\0'; return 1; } void keyflush(int input) { while (input != '\n') { /* 入力バッファのクリア簡易版 */ input = getchar(); } }