C Strings
Strings
Strings are used for storing text/characters.
For example, "Hello World" is a string of characters.
Unlike many other programming languages, C does not have a String type to easily create string variables. Instead, you must use the char
type and create an array of characters to make a string in C:
Note that you have to use double quotes (""
).
To output the string, you can use the printf()
function together with the format specifier %s
to tell C that we are now working with strings:
Example
char greetings[] = "Hello World!";
printf("%s", greetings);
Access Strings
Since strings are actually arrays in C, you can access a string by referring to its index number inside square brackets []
.
This example prints the first character (0) in greetings:
Example
char greetings[] = "Hello World!";
printf("%c", greetings[0]);
Note that we have to use the %c
format specifier to print a single character.
Modify Strings
To change the value of a specific character in a string, refer to the index number, and use single quotes:
Example
char greetings[] = "Hello World!";
greetings[0] = 'J';
printf("%s", greetings);
// Outputs Jello World! instead of Hello World!
Loop Through a String
You can also loop through the characters of a string, using a for
loop:
Example
char carName[] = "Volvo";
int i;
for (i = 0; i < 5; ++i) {
printf("%c\n", carName[i]);
}
And like we specified in the arrays chapter, you can also use the sizeof formula (instead of manually write the size of the array in the loop condition (i < 5)
) to make the loop more sustainable:
Example
char carName[] = "Volvo";
int length = sizeof(carName) / sizeof(carName[0]);
int i;
for (i = 0; i < length; ++i) {
printf("%c\n", carName[i]);
}
Another Way Of Creating Strings
In the examples above, we used a "string literal" to create a string variable. This is the easiest way to create a string in C.
You should also note that you can create a string with a set of characters. This example will produce the same result as the example in the beginning of this page:
Example
char greetings[] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\0'};
printf("%s", greetings);
Why do we include the \0
character at the end? This is known as the "null terminating character", and must be included when creating strings using this method. It tells C that this is the end of the string.
Differences
The difference between the two ways of creating strings, is that the first method is easier to write, and you do not have to include the \0
character, as C will do it for you.
You should note that the size of both arrays is the same: They both have 13 characters (space also counts as a character by the way), including the \0
character:
Example
char greetings[] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\0'};
char greetings2[] = "Hello World!";
printf("%lu\n", sizeof(greetings)); // Outputs 13
printf("%lu\n", sizeof(greetings2)); // Outputs 13
Real-Life Example
Use strings to create a simple welcome message:
Example
char message[] = "Good to see you,";
char fname[] = "John";
printf("%s %s!", message, fname);
Strings - Special Characters
Because strings must be written within quotes, C will misunderstand this string, and generate an error:
The solution to avoid this problem, is to use the backslash escape character.
The backslash (\
) escape character turns special characters into string characters:
Escape character | Result | Description |
---|---|---|
\' | ' | Single quote |
\" | " | Double quote |
\\ | \ | Backslash |
The sequence \"
inserts a double quote in a string:
Example
char txt[] = "We are the so-called \"Vikings\" from the north.";
The sequence \'
inserts a single quote in a string:
Example
char txt[] = "It\'s alright.";
The sequence \\
inserts a single backslash in a string:
Example
char txt[] = "The character \\ is called backslash.";
Other popular escape characters in C are:
Escape Character | Result |
---|---|
\n | New Line |
\t | Tab |
\0 | Null |
String Functions
C also has many useful string functions, which can be used to perform certain operations on strings.
To use them, you must include the <string.h>
header file in your program:
#include <string.h>
String Length
For example, to get the length of a string, you can use the strlen()
function:
Example
char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
printf("%d", strlen(alphabet));
In the Strings chapter, we used sizeof
to get the size of a string/array. Note that sizeof
and strlen
behaves differently, as sizeof
also includes the \0
character when counting:
Example
char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
printf("%d", strlen(alphabet)); // 26
printf("%d", sizeof(alphabet)); // 27
It is also important that you know that sizeof
will always return the memory size (in bytes), and not the actual string length:
Example
char alphabet[50] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
printf("%d", strlen(alphabet)); // 26
printf("%d", sizeof(alphabet)); // 50
Concatenate Strings
To concatenate (combine) two strings, you can use the strcat()
function:
Example
char str1[20] = "Hello ";
char str2[] = "World!";
// Concatenate str2 to str1 (result is stored in str1)
strcat(str1, str2);
// Print str1
printf("%s", str1);
Note that the size of str1
should be large enough to store the result of the two strings combined (20 in our example).
Copy Strings
To copy the value of one string to another, you can use the strcpy()
function:
Example
char str1[20] = "Hello World!";
char str2[20];
// Copy str1 to str2
strcpy(str2, str1);
// Print str2
printf("%s", str2);
Note that the size of str2
should be large enough to store the copied string (20 in our example).
Compare Strings
To compare two strings, you can use the strcmp()
function.
It returns 0
if the two strings are equal, otherwise a value that is not 0:
Example
char str1[] = "Hello";
char str2[] = "Hello";
char str3[] = "Hi";
// Compare str1 and str2, and print the result
printf("%d\n", strcmp(str1, str2)); // Returns 0 (the strings are equal)
// Compare str1 and str3, and print the result
printf("%d\n", strcmp(str1, str3)); // Returns -4 (the strings are not equal)