Modifying strings is an important programming skill. Concatenation involves appending one string to the end of another string.
For example, say we have two strings: "C programming" and "language". We can use concatenation to generate the output, "C programming language."
There are a few ways we can append or concatenate strings in C. This quick tutorial teaches you how to concentrate two strings using the strcat()
function.
Today, we will go over:
- Strings in C refresher
- How to append one string to the end of another
strncat
function for appending characters- More C string questions
- What to learn next
Strings refresher in C
A string is one of the most popular data types in programming. It is a collection of characters grouped together. Under the hood, strings are actually arrays of characters. Just like arrays, we can access string elements through indexing.
The C language can be slightly awkward when it comes to dealing with strings, especially compared to languages like Python. In C, a string is denoted with the help of a character array. A string can be declared with the syntax below.
char stringName [stringSize] ;
Below, variable a
is a character array where you can store up to 10
characters.
char a[10].
And it can be initialized as follows:
- The C program automatically inserts the null character as shown.
char stringName [stringSize] = { 'S' , 'a' , 'n' , 'j' , 'a' , 'y' , '\0' } ;
- A null character is provided by the compiler, implicitly, in the style of initialization as shown.
char stringName [stringSize] = "Sanjay" ;
Let's put these concepts together with two examples.
#include <stdio.h>
int main () {
char a[5] = {'H', 'e', 'l', 'l', 'o',};
printf("String: %s\n", a );
return 0;
}
Output: String: Hello
#include <stdio.h>
int main(void) {
printf("Hello world\n");
char c = 'p';
char s[] = "paul";
printf("c=%c and s=%s\n", c, s);
return 0;
}
Output:
Hello world
c=p and s=paul
In C, strings are always null-terminated. This means that the last element of the character array is a “null” character, abbreviated \0
. When you declare a string as in line 8 above, the compiler does this for you.
Constant character strings are written inside double-quotation marks (see line 5 below), and single character variables are declared using single-quotation marks (see line 7 below).
We can use the sizeof()
function to inspect our character string above to see how long it actually is:
#include <stdio.h>
int main(void) {
char s[] = "paul";
printf("s is %ld elements long\n", sizeof(s));
return 0;
}
Output: s is 5 elements long
Modifying Strings
In C, it is a bit tricky to modify a declared string.Once a a string is declared to be a given length, you cannot just make it longer or shorter by reassigning a new constant to the variable.
There are many built-in functions for modifying strings. Consider two strings s1
and s2
. Here are few built-in functions that are available in the string.h
header file:
-
strlen(s1)
: returns the length of a string. -
strcpy(s1, s2)
: copies strings2
tos1
-
strrev(s1)
: reverses the given string -
strcmp(s1, s2)
: returns 0 ifs1
ands2
contain the same string. -
strcat(s1, s2)
: concatenates two strings
How to append one string to the end of another
In C, the strcat()
function is used to concatenate two strings. It concatenates one string (the source) to the end of another string (the destination). The pointer of the source string is appended to the end of the destination string, thus concatenating both strings.
The basic process is as follows:
- Take the destination string
- Find the NULL character
- Copy the source string beginning with the NULL character of destination string
- Append a NULL character to the destination string once copied
Let's look at an example. Below, the following code will concatenate two strings using the strcat()
function:
#include <stdio.h>
#include <string.h>
int main()
{
char destination[] = "Hello ";
char source[] = "World!";
strcat(destination,source);
printf("Concatenated String: %s\n", destination);
return 0;
}
Output: Concatenated String: Hello World!
In addition to modifying the original destination string, the strcat()
function also returns a pointer to that string. This means that we can directly pass the strcat()
function to the printf()
function.
#include <stdio.h>
#include <string.h>
int main()
{
char destination[] = "Hello ";
char source[] = "World!";
printf("Concatenated String: %s\n", strcat(destination,source));
return 0;
}
Output: Concatenated String: Hello World!
In C, the destination array must be initialized before passing it to strcat
. This means that it must have at least 1 location with a NULL character.
strncat
function for appending characters
The strncat
function is slightly different. We can use this to append at most n
characters from a source string to a destination string. The example below appends the first 5 characters from src
at the end of dest
(i.e. starting from the NULL character). It then appends a NULL character in the end.
#include <stdio.h>
#include <string.h>
#define DEST_SIZE 40
int main()
{
char src[] = "World Here";
char dest[DEST_SIZE] = "Hello";
strncat(dest, src, 5);
printf(dest);
return 0;
}
Output: HelloWorld
Note: The destination array must be large enough to hold the following: the characters of the destination, n characters of the source, and a NULL character.
If the number of characters to copy exceeds the source string, strncat
will stop appending when it encounters the NULL character, like below:
#include <stdio.h>
#include <string.h>
#define DEST_SIZE 40
int main()
{
char src[] = "World Here";
char dest[DEST_SIZE] = "Hello";
strncat(dest, src, 3);
printf(dest);
return 0;
}
Output: HelloWor
More C string questions
There is a lot more we can do with strings in C. Take a look at some of the common interview questions about strings to get a sense of what to learn:
- Edit all the contents of a string
- Replace every character of a string with a different character
- Map every character of one string to another so all occurrences are mapped to the same character
- Modify the string so that every character is replaced with the next character in the keyboard
- Make an array on strings using pointers
- Convert all the letters in a string to Uppercase letters
- Convert a string to an integer
- Splitting a string using
strtok()
in C
What to learn next
Congrats! You should now have a solid idea of how to concatenate two strings in C. It's a simple process that is important to know for building your foundation. A good next step for your C journey is to learn the following:
- Pointers and arrays
- I/O streams
- Debugging in C
- Advanced string modification
To help you with your journey, Educative offers a free course called Learn C From Scratch. This comprehensive and detailed course will introduce you to all the basic and advanced programming concepts of C language.
Happy learning!
Top comments (1)
Great article! Always remember to use
strncpy
,strncat
, andstrncmp
instead ofstrcpy
,strcat
, andstrcmp
to prevent buffer overflows and similar security vulnerabilities though!