Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The following compliant solution performs some of the checking at compile time using a static assertion (see DCL03-AC. Use a static assertion to test the value of a constant expression).

Code Block
bgColor#ccccff
void complain(char const *msg) {
  errno_t err;
  static char const prefix[] = "Error: ";
  static char const suffix[] = "\n";
  char buf[BUFSIZ];

  /* Ensure that more than one character
   * is available for msg. */
  static_assert(sizeof(buf) > sizeof(prefix) + sizeof(suffix),
                "Buffer for complain() is too small");
  strcpy(buf, prefix);

  err = strcat_s(buf, sizeof(buf), msg);
  if (err != 0) {
    /* handle error */
  }

  err = strcat_s(buf, sizeof(buf), suffix);
  if (err != 0) {
    /* handle error */
  }
  fputs(buf, stderr);
}

...