<p>I'm working in C, and I have to concatenate a few things.</p>

<p>Right now I have this:</p>

<pre><code>message = strcat("TEXT ", var);

message2 = strcat(strcat("TEXT ", foo), strcat(" TEXT ", bar));
</code></pre>

<p>Now if you have experience in C I'm sure you realize that this gives you a segmentation fault when you try to run it. So how do I work around that?</p>

In C, "strings" are just plain
```
char
```
arrays. Therefore, you can't directly concatenate them with other "strings".
You can use the
```
strcat
```
function, which appends the string pointed to by
```
src
```
to the end of the string pointed to by
```
dest
```
:
```
```
char *strcat(char *dest, const char *src);
```
```
Here is an
example from cplusplus.com
:
```
```
char str[80];
strcpy(str, "these ");
strcat(str, "strings ");
strcat(str, "are ");
strcat(str, "concatenated.");
```
```
For the first parameter, you need to provide the destination buffer itself.  The destination buffer must be a char array buffer.  E.g.:
```
char buffer[1024];
```
Make sure
that the first parameter has enough space to store what you're trying to copy into it.  If available to you, it is safer to use functions like:
```
strcpy_s
```
and
```
strcat_s
```
where you explicitly have to specify the size of the destination buffer.
Note
: A string literal cannot be used as a buffer, since it is a constant. Thus, you always have to allocate a char array for the buffer.
The return value of
```
strcat
```
can simply be ignored, it merely returns the same pointer as was passed in as the first argument. It is there for convenience, and allows you to chain the calls into one line of code:
```
```
strcat(strcat(str, foo), bar);
```
```
So your problem could be solved as follows:
```
```
char *foo = "foo";
char *bar = "bar";
char str[80];
strcpy(str, "TEXT ");
strcat(str, foo);
strcat(str, bar);
```
```