C String Functions with Examples
One of the most frequently used data types in all computer languages is the string. Strings are described in C as arrays of characters that end in the null character “0.” Writing C programs that store, manipulate, or communicate textual data requires proper string handling.
Explanation of Strings in C
Strings are kept in C as arrays of the char data type. A string’s characters each take up one byte of memory. The string’s final character is always the null terminator ‘0’ to indicate the string’s end. For instance:
char str[6] = {'H','e','l','l','o','\0'};Here, str is an array of 6 characters, including the null terminator. The length of this string is 5 (excluding null).
We can also declare strings like this:
char str[6] = "Hello";
The compiler automatically appends the ‘\0’ at the end.
Strings in C can be initialized but cannot be assigned. For example:
str = "World"; // Error
This is because arrays cannot be assigned in C. We need to use string functions like strcpy() for assignments.
Importance of String Handling in C
- Textual data is very common in applications – names, addresses, messages, etc. Proper string handling helps manage this data efficiently.
- Strings are used for file I/O, network communication, user interaction, data processing, etc., in C. Robust string functions help implement the core functionality.
- Strings in C are stored in simple character arrays. String functions in C are needed for manipulation like concatenation, substring search, case change, etc.
- Safety and security of string operations are also important to avoid bugs like buffer overflows. Secure string functions prevent vulnerabilities.
- Efficiency in string operations affects overall program performance. Optimized string functions improve speed for string-intensive applications.
Basic String Functions in C
C provides a wide range of built-in functions for manipulating strings. Here are some commonly used basic string functions.
| Function | Description |
| strlen(string) | Calculates and gives back the number of characters in the provided string |
| strcpy(destination, source) | Takes the contents of the source string and puts them into the destination string |
| strcat(first_string, second_string) | Joins first_string and second_string together. The combined string is put into first_string. |
| strcmp(first_string, second_string) | Evaluate first_string and second_string to check if they are the same. Returns 0 if they match exactly. |
| strrev(string) | Flips the order of the characters in the string and gives back the reversed version |
| strlwr(string) | Alters the string so all characters are in lowercase, then returns the lowercase string |
| strupr(string) | Alters the string so all characters are in uppercase, then returns the uppercase string |
| strlen() | Returns back the length of the provided string |
| strnlen() | Gives back the length specified if it is less than the string length; otherwise, it gives the full string length |
| strcmp() | Assesses two strings and returns 0 if they match exactly |
| strncmp() | Compares only the first n characters of the two strings |
| strcat() | Joins two strings together and returns the combined string |
| strncat() | Joins the first n characters of one string onto the end of another string |
| strcpy() | Copies the contents of one string into a different string |
| strncpy() | Copies only the first n characters from one string into another string |
| strchr() | Finds the first instance of a given character within a string |
| strrchr() | Finds the last instance of a given character within a string |
| strstr() | Finds the first instance of a given substring within a string |
| strnstr() | Finds the first instance of a given substring in a string, searching only the first n characters |
| strcasecmp() | Compares two strings, ignoring the difference in capitalization |
| strncasecmp() | Compares only the first n characters of two strings, ignoring differences in capitalization |
strlen() – Finding String Length
Syntax
size_t strlen(const char *str);
Purpose and Description
- strlen() calculates the length of the given null-terminated string str.
- It returns the number of characters in the string excluding the null terminator ‘\0’.
- This function is defined in string.h header file.
Example
#include <stdio.h>
#include <string.h>
int main() {
char str[50] = "Hello, World!";
int len = strlen(str);
printf("Length of the string is: %d", len);
return 0;
}strcpy() – Copying Strings
Syntax
char *strcpy(char *destination, const char *source);
Purpose and Description
- Using the strcpy() function, you can copy a string from the source to the destination character array.
- It returns the destination string.
- Both strings should have enough space to store the content.
Example
#include <stdio.h>
#include <string.h>
int main() {
char source[20] = "Hello";
char destination[20];
// Copies source to destination
strcpy(destination, source);
printf("Destination string: %s", destination);
return 0;
}strcat() – Concatenating Strings
Syntax
char *strcat(char *destination, const char *source);
Purpose and Description
- You can copy a string from the source to the target character array using the strcpy() function.
- To save the combined text after concatenation, the destination string must have enough room.
- It returns the destination string.
Example
#include <stdio.h>
#include <string.h>
int main() {
char destination[30] = "Hello";
char source[15] = "World";
// Concatenates source to destination
strcat(destination, source);
printf("Destination string: %s", destination);
return 0;
}strcmp() – Comparing Strings
Syntax
int strcmp(const char *str1, const char *str2);
Purpose and Description
- strcmp() compares two null-terminated strings lexicographically.
- If both strings are equal, it returns 0.
- Returns a negative number if str1 is less than str2.
- Returns a positive number if str1 is greater than str2.
Example
#include <stdio.h>
#include <string.h>
int main() {
char str1[15];
char str2[15];
strcpy(str1, "Apple");
strcpy(str2, "Mango");
int result = strcmp(str1, str2);
if(result == 0) {
printf("Strings are equal");
} else if(result > 0) {
printf("str1 is greater than str2");
} else {
printf("str1 is less than str2");
}
return 0;
}Additional String Functions in C
Here are some more useful string functions provided in C.
strchr() – Finding a Character in a String
Syntax
char *strchr(const char *str, int character);
Purpose and Description
- strchr() searches for the first occurrence of the given character in the string.
- It returns a pointer to the matched character in the string.
- If the character is not found, it returns NULL.
Example
#include <stdio.h>
#include <string.h>
int main() {
char str[50] = "Hello, World!";
char *result;
result = strchr(str, 'W');
if(result) {
printf("Character found at %ld", result-str);
} else {
printf("Character not found");
}
return 0;
}strstr() – Finding a Substring in a String
Syntax
char *strstr(const char *str, const char *substr);
Purpose and Description
- strstr() searches for the first occurrence of substring substr in the string str.
- It returns a pointer to the beginning of the substring if found.
- If substr is not found, it returns NULL.
Example
#include <stdio.h>
#include <string.h>
int main() {
char str[100] = "Hello, World!";
char *result;
result = strstr(str, "World");
if(result) {
printf("Substring found at %ld", result-str);
} else {
printf("Substring not found");
}
return 0;
}Output: Substring found at 7
strtok() – Tokenizing Strings
Syntax
char *strtok(char *str, const char *delimiter);
Purpose and Description
- strtok() breaks the given string into tokens separated by the delimiter character(s).
- In the first call, it expects the string argument str. In subsequent calls, use NULL for str.
- It returns a pointer to the next token in the string.
- When no token is left, it returns NULL.
Example
#include <stdio.h>
#include <string.h>
int main() {
char str[100] = "Hello, This is a test";
char *token;
// First call
token = strtok(str, " ");
while(token != NULL) {
printf("%s\n", token);
// Subsequent calls
token = strtok(NULL, " ");
}
return 0;
}Hello,
This
is
a
test
puts() and gets() – Input and Output Functions
Syntax and Purpose
puts() – Outputs a string to stdout and appends a new line.
gets() – Reads a string from stdin till newline.
Example for puts()
#include <stdio.h>
int main() {
char str[] = "Hello, World!";
puts(str);
return 0;
}Hello, World!
Example for gets()
#include <stdio.h>
int main() {
char str[100];
printf("Enter a string: ");
gets(str);
printf("You entered: %s", str);
return 0;
}Input: Hello, World!
strlwr() / strupr() – Convert Strings to Lowercase / Uppercase
Syntax and Purpose
strlwr() converts a string to lowercase.
strupr() converts a string to uppercase
Example for strlwr()
#include <stdio.h>
#include <string.h>
int main() {
char str[20] = "Hello WORLD";
strlwr(str);
printf("Lowercase string: %s", str);
return 0;
}Example for strupr()
#include <stdio.h>
#include <string.h>
int main() {
char str[20] = "Hello world";
strupr(str);
printf("Uppercase string: %s", str);
return 0;
}strrev() – Reverse a String
Syntax and Purpose
strrev() reverses the given null-terminated string.
Example
#include <stdio.h>
#include <string.h>
int main() {
char str[50] = "Hello, World!";
strrev(str);
printf("Reversed string: %s", str);
return 0;
}Performance Considerations
Optimizing string operations can significantly improve program efficiency.
Optimizing String Operations
- Use pointer notation instead of array notation wherever possible.
- Use stack allocation instead of dynamic allocation if string sizes are known.
- Use char arrays instead of printf() where feasible.
- Use strnxxx() functions instead of strxxx() to avoid buffer overflows.
- Use const pointers for strings that won’t change.
Memory Allocation Strategies
- Allocate string buffer size dynamically where possible.
- Use optimal string size to avoid large unused buffers.
- Reuse already allocated buffers instead of allocating new ones.
- Free buffers promptly after use for better memory utilization.
Use Cases and Examples
Here are some examples of string usage in real-world C programs:
- File I/O – Reading data from files into character arrays, parsing filenames, paths etc.
- Networking – Transmitting textual data over sockets, parsing URLs, and formatting network packets.
- Databases – Storing, retrieving and filtering data from databases.
- Web servers – Handling HTTP requests, and generating HTML or JSON output.
- Command-line interfaces – Reading user input, printing formatted output to console.
- Text editors – Managing entire documents in memory, searching and replacing.
Conclusion
String handling is essential in C for storing, processing and communicating text-based data. This article covered C’s string representation, standard string functions, advanced manipulation, multibyte strings, performance optimization, and real-world applications across domains. Robust string functions make C suitable for diverse text-processing tasks.
Did you know we work 24x7 to provide you best tutorials
Please encourage us - write a review on Google

