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.
+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
2009-06-09 05:39:24
+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
2009-06-09 05:41:10
Note that strncat() (with the 'n') is extremely hard to use correctly - so don't use it.
Jonathan Leffler
2009-06-09 05:49:48
Why is it harder than counting your buffers in strcat?
Vinko Vrsalovic
2009-06-09 05:55:56
@Jonathan:Don't know about "extremely hard", but it's much safer.
Tal Pressman
2009-06-09 06:25:35
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
2009-06-09 06:54:01
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
2009-06-09 09:16:59
If I didn't use the [50] above but used just [], the code still works. But is that a memory leak?
Volomike
2009-08-09 04:00:21
+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
2009-06-09 05:52:51
many people can only rely on c89. sweet snprintf isn't available for them :(
Johannes Schaub - litb
2009-06-10 09:32:48
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
2009-06-09 05:54:16
sizeof(char) is 1, always. http://drj11.wordpress.com/2007/04/08/sizeofchar-is-1/
Vinko Vrsalovic
2009-06-09 05:57:49
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
2009-06-09 09:14:58