/* --- LA, CSSE, Monash University, Australia 3800, 3/2/2005 --- */ #include main(int argc, /* Count of command line arguments (parameters) */ char *argv[] /* Values of parameters: array of string (pointer to char) */ ) { FILE *inp; int i, result, Ai, *A, N; printf("command line:"); for(i = 0; i < argc; i++) printf(" argv[%d]=\"%s\"", i, argv[i]); /* print each cmd line param */ printf("\n"); /* NB argv[0] = program name */ inp = stdin; /* default input file, but...*/ /* if there is a genuine */ if(argc > 1) /* command line parameter... */ { inp = fopen(argv[1], "r"); /* mode "r" i.e. read, text */ if(!inp) /* error, could not open it */ { printf("could not open file \"%s\", halting\n", argv[1]); exit(1); } } else /* no genuine command line parameters, use stdin */ printf("no file specified, reading from stdin\n"); /* ------------------------------------------------------------- */ /* Read some integers from a file, stop at EOF, allocate as much */ /* space as necessary, do it all in linear time. */ N = 1; A = (int*)malloc(N*sizeof(int)); /* allocate a small array A[] */ for(i = 0; ; i++) { result = fscanf(inp, "%i", &Ai); if(result == EOF) /* done */ break; /* else */ if( i >= N ) { N = 2*N; A = (int*)realloc(A, N*sizeof(int)); /* enlarge A[] if necessary */ } A[i] = Ai; printf("A[%i] = %i\n", i, A[i]); /* trace */ } N = i; A = (int*)realloc(A, N*sizeof(int)); /* trim A[] down to size */ printf("N = %i\n", N); /* trace */ }/*main*/ /* malloc, realloc, L.Allison Comp Sci Monash */