Skip to content

Instantly share code, notes, and snippets.

@begriffs
Last active February 15, 2021 03:19
Show Gist options
  • Select an option

  • Save begriffs/22d93deb4ca2c0ceaa8f881c2f455b54 to your computer and use it in GitHub Desktop.

Select an option

Save begriffs/22d93deb4ca2c0ceaa8f881c2f455b54 to your computer and use it in GitHub Desktop.

Revisions

  1. begriffs revised this gist Feb 15, 2021. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion concat.c
    Original file line number Diff line number Diff line change
    @@ -25,7 +25,7 @@ char *concat(size_t n, ...)
    else
    ret = bigger;
    strcpy(ret+retlen, s);
    retlen += s;
    retlen += slen;
    }
    va_end(ap);
    return ret;
  2. begriffs created this gist Feb 15, 2021.
    32 changes: 32 additions & 0 deletions concat.c
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,32 @@
    /* concat(0) creates a new "" in heap memory,
    and concat(1, foo) is equivalent to strdup(foo).
    Note I haven't tested this function yet. */

    char *concat(size_t n, ...)
    {
    va_list ap;
    size_t retlen = 0;
    char *ret = calloc(1,1);
    if (!ret)
    return NULL;

    va_start(ap, n);
    while (n-- > 0)
    {
    char *s = va_arg(ap, char*);
    size_t slen = strlen(s);
    char *bigger = realloc(ret, retlen+slen+1);
    if (!bigger)
    {
    free(ret);
    return NULL;
    }
    else
    ret = bigger;
    strcpy(ret+retlen, s);
    retlen += s;
    }
    va_end(ap);
    return ret;
    }