As others have said, you do not need the -1 in this case.  If the array is fixed size, I would use strncpy instead.  It was made for copying strings - sprintf was made for doing difficult formatting.  However, if the size of the array is unknown or you are trying to determine how much storage is necessary for a formatted string.  This is what I really like about the Standard specified version of snprintf:
char* get_error_message(char const *msg) {
    size_t needed = snprintf(NULL, 0, "%s: %s (%d)", msg, strerror(errno), errno);
    char  *buffer = malloc(needed+1);
    sprintf(buffer, "%s: %s (%d)", msg, strerror(errno), errno);
    return buffer;
}
Combine this feature with va_copy and you can create very safe formatted string operations.