000
28.08.2003, 12:00 Uhr
virtual
Sexiest Bit alive (Operator)
|
Hi,
Zeit fürs 41. Virtualrätsel: Das folgende Programm sollte verstanden werden und danach golfiziert werden. In der golfizierten Version darf auf Fehlerbehandlung verzichtet werden, aber die Funktionalität muß ansonsten erhalten bleiben. Wie das Programm ansonsten aussieht sollte jeder für sich selbst entscheiden.
C++: |
#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <errno.h> #include <string.h>
int main( int argc, char** argv) { FILE* in = NULL; char buffer[16]; size_t len; size_t offset = 0; size_t i;
/* * Check parameters, open file */ if (2 == argc) { in = fopen(argv[1], "rb"); if (NULL == in) { fprintf(stderr, "error: %s: cannot open %s: %s.\n", argv[0], argv[1], strerror(errno)); exit(EXIT_FAILURE); } }else if (1 == argc) { in = stdin; }else { fprintf(stderr, "error: %s: bad command line.\n" "usage: %s [file]\n", argv[0], argv[0]); exit(EXIT_FAILURE); }
/* * Loop to dump */ do { len = fread(buffer, 1, sizeof(buffer), in); printf("%08x ", offset); offset += len; for(i=0; i<sizeof(buffer); ++i) { if (i<len) { printf("%02x ", (unsigned char)buffer[i]); }else { printf(" "); } } for(i=0; i<len; ++i) { if (isprint(buffer[i])) { putchar(buffer[i]); }else { putchar('.'); } } putchar('\n'); } while (len==sizeof(buffer));
/* * check errors and cleanup */ if (!feof(in)) { fprintf(stderr, "error: %s: reading failed!\n", argv[0]); if (in != stdin) { fclose(in); } exit(EXIT_FAILURE); } if (in != stdin) { fclose(in); }
return EXIT_SUCCESS; }
|
-- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) Dieser Post wurde am 28.08.2003 um 12:01 Uhr von virtual editiert. |