**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);
}


```