views:

738

answers:

5

i was wondering if there was a way to add a value to a string, not like 1 + 1 = 2 but like 1 + 1 = 11.

A: 

strcat(s1, s2). Watch your buffer sizes.

Dave
+1  A: 

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

JaredPar
+6  A: 

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

m3rLinEz
Note that strncat() (with the 'n') is extremely hard to use correctly - so don't use it.
Jonathan Leffler
Why is it harder than counting your buffers in strcat?
Vinko Vrsalovic
@Jonathan:Don't know about "extremely hard", but it's much safer.
Tal Pressman
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.
Thomas
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.
RBerteig
If I didn't use the [50] above but used just [], the code still works. But is that a memory leak?
Volomike
+5  A: 

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");
ammoQ
-1: please use snprintf instead
ynimous
ynimous: snprintf is not available everywhere
ammoQ
many people can only rely on c89. sweet snprintf isn't available for them :(
Johannes Schaub - litb
A: 

'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);
Sean
sizeof(char) is 1, always. http://drj11.wordpress.com/2007/04/08/sizeofchar-is-1/
Vinko Vrsalovic
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
malloc() may return NULL, causing UB.
aib