size_t required_size = snprintf(NULL, 0, "%s: %s (%d)", msg, strerror(errno), errno) + 1; char *buffer = malloc(needed); sprintf(buffer, "%s: %s (%d)", msg, strerror(errno), errno);