Copying n chars with strncpy more efficiently in C

c, malloc, string, strncpy

Solution

I wouldn't use `strncpy` for this at all. At least if I understand what you're trying to do, I'd probably do something like this:

char *duplicate(char *input, size_t max_len) {
    // compute the size of the result -- the lesser of the specified maximum
    // and the length of the input string. 
    size_t len = min(max_len, strlen(input));

    // allocate space for the result (including NUL terminator).
    char *buffer = malloc(len+1);

    if (buffer) {
        // if the allocation succeeded, copy the specified number of 
        // characters to the destination.
        memcpy(buffer, input, len);
        // and NUL terminate the result.
        buffer[len] = '\0';
    }
    // if we copied the string, return it; otherwise, return the null pointer 
    // to indicate failure.
    return buffer;
}

Problem

I'm wondering if there's a cleaner and more efficient way of doing the following `strncpy` considering a `max` amount of chars. I feel like am overdoing it. ``` int main(void) { char *string = "hello world foo!"; int max = 5; char *str = malloc (max + 1); if (str == NULL) return 1; if (string) { int len = strlen (string); if (len > max) { strncpy (str, string, max); str[max] = '\0'; } else { strncpy (str, string, len); str[len] = '\0'; } printf("%s\n", str); } return 0; } ```

Original source