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);
Author by
austin
Updated on June 18, 2022Comments
-
austin almost 2 years
How to concatenate strings in C, not like
1
+1
=2
but like1
+1
=11
. -
Jonathan Leffler almost 15 yearsNote that strncat() (with the 'n') is extremely hard to use correctly - so don't use it.
-
Vinko Vrsalovic almost 15 yearsWhy is it harder than counting your buffers in strcat?
-
Vinko Vrsalovic almost 15 yearssizeof(char) is 1, always. drj11.wordpress.com/2007/04/08/sizeofchar-is-1
-
Tal Pressman almost 15 years@Jonathan: Don't know about "extremely hard", but it's much safer.
-
Thomas almost 15 yearsnot 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 almost 15 yearsynimous: snprintf is not available everywhere
-
RBerteig almost 15 yearsThis 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 almost 15 yearsstrncat() 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 almost 15 yearsmany people can only rely on c89. sweet snprintf isn't available for them :(
-
aib almost 15 yearsmalloc() may return NULL, causing UB.
-
Volomike almost 15 yearsIf I didn't use the [50] above but used just [], the code still works. But is that a memory leak?