Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why copy function arguments into local variables?

Tags:

c

string.h

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.

like image 446
Micha Wiedenmann Avatar asked Jan 25 '13 10:01

Micha Wiedenmann


1 Answers

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;.

like image 146
Some programmer dude Avatar answered Oct 08 '22 00:10

Some programmer dude