Strings in C (char Array, Input & Output)
In this lesson: Learn strings in C — char arrays, null character, scanf vs fgets, puts and string programs with output in simple Hindi & English.
What is a String in C?
C does not have a built-in string type like Java or Python. In C, a string is simply a character array that ends with a special null character '\\0' (null terminator). This null character marks the end of the string.
char name[] = "Gagan"; // Memory: G a g a n \\0 //Index: 0 1 2 3 4 5 // The \\0 is automatically added at the end!
Always declare a char array one byte larger than the string length to accommodate the null terminator. For "Hello" (5 chars), declare char str[6].
Declaring and Initializing Strings
// Method 1: String literal (auto adds \\0) char name[] = "Gagan"; // Size = 6 (5 + \\0) // Method 2: Explicit size char city[50] = "Aligarh"; // Size 50, can hold up to 49 chars // Method 3: Char by char (must add \\0 manually!) char str[6] = {'H','e','l','l','o','\\0'}; // Uninitilized (declare, fill later) char input[100]; // Buffer for user input
After declaration, you cannot do name = "Rahul". Use strcpy(name, "Rahul") instead. The = operator only works during initialization.
String Input and Output
#include <stdio.h> int main() { char name[50], city[50], sentence[200]; // printf / scanf — reads until whitespace (one word only) printf("Enter first name: "); scanf("%s", name); // No & needed for char array! printf("Hello, %s!\\n", name); // gets() — reads entire line including spaces (UNSAFE but simple) printf("Enter city: "); getchar(); // Clear newline from buffer gets(city); puts(city); // puts adds \\n automatically // fgets() — SAFER, reads whole line, specify max chars printf("Enter sentence: "); fgets(sentence, sizeof(sentence), stdin); printf("You said: %s", sentence); return 0; }
| Function | Usage | Handles spaces? | Safe? |
|---|---|---|---|
scanf("%s") | One word input | ❌ Stops at space | ⚠️ No buffer check |
gets() | Full line input | ✅ Yes | ❌ Unsafe (deprecated) |
fgets() | Full line with size limit | ✅ Yes | ✅ Safe (recommended) |
printf("%s") | Print string | ✅ Yes | ✅ |
puts() | Print string + newline | ✅ Yes | ✅ |
String Functions (string.h)
Include #include <string.h> to use these.
strrev(), strupr() and strlwr() are compiler-specific, not standard C. Use manual loops for portable programs.
#include <stdio.h> #include <string.h> int main() { char s1[50] = "Hello"; char s2[50] = "World"; printf("strlen(s1) = %d\\n", (int)strlen(s1)); // 5 printf("strcmp(s1,s2) = %d\\n", strcmp(s1, s2)); // negative (H < W) strcat(s1, " World"); printf("After strcat: %s\\n", s1); // "Hello World" strcpy(s2, "CodingEasily"); printf("After strcpy: %s\\n", s2); // "CodingEasily" // Convert case (manual) for (int i = 0; s1[i]; i++) { if (s1[i] >= 'a' && s1[i] <= 'z') s1[i] -= 32; // to uppercase } printf("Uppercase: %s\\n", s1); return 0; }
| Function | Syntax | Returns | Purpose |
|---|---|---|---|
strlen() | strlen(s) | length (int) | String length (excl. \\0) |
strcpy() | strcpy(dest, src) | dest pointer | Copy src into dest |
strcat() | strcat(dest, src) | dest pointer | Append src to dest |
strcmp() | strcmp(s1, s2) | 0/negative/positive | Compare (0 = equal) |
strchr() | strchr(s, ch) | pointer | Find a character |
strstr() | strstr(s, sub) | pointer | Find substring |
strstr() | strstr(s, sub) | pointer or NULL | Find substring |
Complete Programs
Check Palindrome
#include <stdio.h> #include <string.h> int main() { char str[100], rev[100]; printf("Enter string: "); scanf("%s", str); strcpy(rev, str); int i = 0, j = strlen(rev) - 1; while (i < j) { char temp = rev[i]; rev[i] = rev[j]; rev[j] = temp; i++; j--; } if (strcmp(str, rev) == 0) printf("%s is a Palindrome\\n", str); else printf("%s is NOT a Palindrome\\n", str); return 0; }
Summary
- Strings in C =
chararrays ending with'\\0'(null terminator) - Always allocate one extra byte for
'\\0' - Use
fgets()for safe string input with spaces - Include
<string.h>for string functions - Key functions:
strlen,strcpy,strcat,strcmp - Cannot use
=to copy strings; usestrcpy()
Frequently Asked Questions
What is a string in C?
'\0', which marks where the text stops. For example char name[] = "Amit"; stores five characters: the four letters plus the terminating null.What is the null terminator in a C string?
'\0' automatically placed at the end of every string literal. It tells string functions where the text ends, which is why a character array must have room for it in addition to the visible characters.How do you read a string with spaces in C?
scanf("%s", ...) stops at the first space, so it only reads one word. To read a full line including spaces you use fgets(str, size, stdin), which reads until a newline or the buffer is full and is also safer against overflow.How do you find the length of a string in C?
strlen from <string.h>, which counts characters up to but not including the null terminator. So strlen("Amit") returns 4, even though the array itself uses five bytes including the '\0'.What is the difference between a character array and a string in C?
'\0', string functions will read past the end and misbehave.