**Review .h include needs** Do not rely on other code to include the files for a given .c, .h file. `set.h` needs `<stdio.h>` for `FILE`. `set.h` needs TBD for `Pair`. `get.h` needs `<time.h>` for `time_t`. `get.h` does not need `<stdlib>`. `set.c` should include "set.h", first. **Simplify/imporve `compareString()`** ``` int compareString(const char* a, const char* b) { int cmp = strncmp(a,b, 2); if (cmp < 0) return 1; if (cmp > 0) return 2; return 0; } ``` Perhaps re-write calling code to use `strncmp()` result directly? **Wrong use of `strncpy()`** Code uses `strncpy()` to prevent overrun, yet risks failing to form a _string_. ``` char command[10]; strncpy(command, argv[1], 10); // BAD as `command` may now lack a null character ``` `snprintf(command, sizeof command, "%s", argv[1]);` is better. Good compilers will emit efficient code. Even this lacks error reporting. I'd write a helper function for this as program arguments can be quite wild. Something like: ``` char *my_strcpy(size_t sz, char dest[sz], char *source) { if (strlen(source) >= sz) { fprintf(stderr, "Destination buffer size [%zu] too small for <%s>.\n", sz, source); exit(EXIT_FAILURE); } return strcpy(dest, source); } ```