|
用C语言编通讯录程序(初学者级别的)(5) free(p); break; } getstr(fp, &p->address); getstr(fp, &p->zip); getstr(fp, &p->phone); make(h, p); } fclose(fp); return h; } /* 从文件读入一行,并删除前导和尾随空白符后保存于堆空间 */ int getstr(FILE *rfp, char **s) { int len; if ((len = getbuffer(rfp)) == 0) { *s = NULL; return 0; } *s = (char *)malloc(len+1); strcpy(*s, buffer); return len; } /* 从文件读入一行,并删除前导和尾随空白符后保存于buffer */ int getbuffer(FILE *rfp) { int len; char *hp, *tp; if (fgets(buffer, MAXLEN, rfp) == NULL) return 0; hp = buffer; while(*hp == ' ' ¦¦ *hp == '\t') hp++; tp = hp + strlen(hp) - 1; while (tp >= hp && (*tp == ' ' ¦¦ *tp == '\t' ¦¦ *tp == '\n')) tp--; *(tp+1) = '\0'; for(tp = buffer; *tp++ = *hp++;); len = strlen(buffer); return len; } /* 释放内存空间 */ void freeall(ADDR *head) { ADDR *p; p = head->next; free(head); while (p != NULL) { if (p->name != NULL) free(p->name); if (p->address != NULL) free(p->address); if (p->phone != NULL) free(p->phone); if (p->zip != NULL) free(p->zip); head = p->next; free(p); p = head; } } void show( ADDR *ptr ) { ADDR *p; ……………………………… TO BE CONTINUED…………
|