// ²òÅú4.3 member.c #include #include #include #include typedef struct member { char name[20]; char comment[40]; struct member *next; } Member; void write_member(Member *mp,int n,FILE *ofp) { if (mp==0) return; if (ofp==stdout) printf("%4d:", n); fprintf(ofp, "%-20s%-40s\n", mp->name, mp->comment ); } void separate(const char *s, char *s1, char *s2) { int i, i1, i2; for(i=0; s[i]; i++) if (s[i]==' ') break; strncpy(s1, s, i); for (i1=0; s[i+i1]==' ';i1++) ; for (i2=0; s[i+i1+i2] ;i2++) ; strncpy(s2, s+i+i1, i2); } void makelist(char **list, Member *m) { Member *mp = malloc(sizeof(Member)); mp->next=0; m->next = mp; while (*list) { Member *mp2 = malloc(sizeof(Member)); // sscanf(*list,"%s %s", mp->name, mp->comment); separate(*list, mp->name, mp->comment); mp->next = mp2; mp = mp2; list++; } mp->next = 0; } int length(const Member *mp) { if (mp==0) return 0; int c=0; Member *p=mp->next; while (p && p->next) { p=p->next; c++; } return c; } char *input[] = { "abc ABC" , "def DEF", "ghi GHI" , "jkl JKL" }; Member m; int main() { makelist(input, &m); Member *mp=&m; int n=0; while (mp->next) { write_member(mp, n++, stdout); mp=mp->next; } printf("length=%d\n", length(&m)); }