Concatenating strings in C

15,842

Solution 1

I think you need string concatenation:

#include <stdio.h>
#include <string.h>

int main() {
  char str1[50] = "Hello ";
  char str2[] = "World";

  strcat(str1, str2);

  printf("str1: %s\n", str1);

  return 0;
}

from: http://irc.essex.ac.uk/www.iota-six.co.uk/c/g6_strcat_strncat.asp

Solution 2

To concatenate more than two strings, you can use sprintf, e.g.

char buffer[101];
sprintf(buffer, "%s%s%s%s", "this", " is", " my", " story");

Solution 3

Try taking a look at the strcat API. With sufficient buffer space, you can add one string onto the end of another one.

char[50] buffer;
strcpy(buffer, "1");
printf("%s\n", buffer); // prints 1
strcat(buffer, "1");
printf("%s\n", buffer); // prints 11

Reference page for strcat

Solution 4

'strcat' is the answer, but thought there should be an example that touches on the buffer-size issue explicitly.

#include <string.h>
#include <stdlib.h>

/* str1 and str2 are the strings that you want to concatenate... */

/* result buffer needs to be one larger than the combined length */
/* of the two strings */
char *result = malloc((strlen(str1) + strlen(str2) + 1));
strcpy(result, str1);
strcat(result, str2);
Share:
15,842
austin
Author by

austin

Updated on June 18, 2022

Comments

  • austin
    austin almost 2 years

    How to concatenate strings in C, not like 1 + 1 = 2 but like 1 + 1 = 11.

  • Jonathan Leffler
    Jonathan Leffler almost 15 years
    Note that strncat() (with the 'n') is extremely hard to use correctly - so don't use it.
  • Vinko Vrsalovic
    Vinko Vrsalovic almost 15 years
    Why is it harder than counting your buffers in strcat?
  • Vinko Vrsalovic
    Vinko Vrsalovic almost 15 years
  • Tal Pressman
    Tal Pressman almost 15 years
    @Jonathan: Don't know about "extremely hard", but it's much safer.
  • Thomas
    Thomas almost 15 years
    not much safer. There is a reason strlcat() exists. Although that's not a complete fix either. It's just a drop-in improvement. I'd use snprintf(). It has the best behavior.
  • Erich Kitzmueller
    Erich Kitzmueller almost 15 years
    ynimous: snprintf is not available everywhere
  • RBerteig
    RBerteig almost 15 years
    This leaks memory by overwriting the pointer result, and needs at least one strcpy() as well. Also, it extends str1, but the implication is that you intended both str1 and str2 to be read only.
  • RBerteig
    RBerteig almost 15 years
    strncat() doesn't guarantee the result is nul terminated. strlcat() does, but may not be widely available. strcat() is blissfully ignorant of the size of the destination buffer. In short, the C standard library is burdened by a lot of history that gets in the way of preventing buffer overruns.
  • Johannes Schaub - litb
    Johannes Schaub - litb almost 15 years
    many people can only rely on c89. sweet snprintf isn't available for them :(
  • aib
    aib almost 15 years
    malloc() may return NULL, causing UB.
  • Volomike
    Volomike almost 15 years
    If I didn't use the [50] above but used just [], the code still works. But is that a memory leak?