cstring.h

Why copy function arguments into local variables?


What is the reason for strlcpy.c to copy the arguments into local variables:

size_t
strlcpy(char *dst, const char *src, size_t siz)
{
    char *d = dst;
    const char *s = src;
    size_t n = siz;

    /* Copy as many bytes as will fit */
    if (n != 0) {
        while (--n != 0) {
            if ((*d++ = *s++) == '\0')
                break;
        }
    }

    /* Not enough room in dst, add NUL and traverse rest of src */
    if (n == 0) {
        if (siz != 0)
            *d = '\0';      /* NUL-terminate dst */
        while (*s++)
            ;
    }

    return(s - src - 1);    /* count does not include NUL */
}

Update

I added the body.


Solution

  • One very common reason is that the variables are modified in the function, and then used in an expression together with the arguments.

    For example, the function might modify the variable n, and later do e.g. return siz - n;.