Lesson 8 — Beginner
Strings in C
C mein string koi alag type nahi hai — bas char array jo ek special character par rukta hai: '\0'. Is lesson mein hum isi detail ko dekhenge — string kaise banti hai, safely input kaise lete hain, string.h ke functions kaise chalte hain, aur palindrome jaise programs kaise bante hain.
String = char array + null terminator
WHAT
String C mein char array hai jo '\0' (null character, ASCII 0) par khatam hota hai. Compiler is terminator ki wajah se jaanta hai string kab khatam — bina '\0' ke toh wo bas characters hain.
WHEN
Jab bhi text ho — naam, address, message, password. Har string function isi '\0' ke aage dekh kar kaam karta hai.
WHERE
printf %s, scanf %s, har file ka text, har command line input — string C ke I/O ki jaan hai.
#include <stdio.h>
int main() {
char name[20] = "DSWallah";
// D S W a l l a h \0
// 0 1 2 3 4 5 6 7 8
printf("%s\n", name); // DSWallah
printf("Size = %zu\n", sizeof(name)); // 20 (poora array)
return 0;
}
Output:
DSWallah
Size = 20
- Length vs size: "DSWallah" ki length 8, array size 20. '\0' length mein count nahi hota, size mein jagah le leta hai.
- char name[8] = "DSWallah"; — problem! '\0' ke liye jagah nahi bachti. Hamesha 1 extra rakho (name[9]).
- Char wise access: name[0] = 'D', name[7] = 'h' — array jaisi hi zindagi.
- String literal vs array: char *s = "abc" string literal hai (read-only, badal mat), char s[] = "abc" array hai (editable).
String ka input aur output
#include <stdio.h>
int main() {
char name[50];
printf("Ek shabd: ");
scanf("%49s", name); // space pe rok jaata hai
printf("Shabd = %s\n", name);
printf("Poori line: ");
scanf(" %[^\n]", name); // space sahit (ek trick)
printf("Line = %s\n", name);
return 0;
}
Ek shabd: Rahul
Shabd = Rahul
- %s ke saath width: scanf("%49s", buf) — buffer overflow se bachne ka standard tareeka.
- Space chahiye: "%[^ ]" poora line leta hai (newline tak), par width na bhoolo.
- Safest: fgets(buf, sizeof(buf), stdin) — newline ke saath, size limited.
- Print: printf("%s", s) ya puts(s) — puts khud newline add karta hai.
string.h ke 4 must-know functions
#include <stdio.h>
#include <string.h>
int main() {
char a[30] = "Hello";
char b[30] = "World";
printf("Len = %d\n", (int)strlen(a)); // 5
strcat(a, " ");
strcat(a, b);
printf("%s\n", a); // Hello World
printf("cmp = %d\n", strcmp("abc", "abd")); // -1 (negative)
strcpy(a, "Bye");
printf("%s\n", a); // Bye
return 0;
}
Output:
Len = 5
Hello World
cmp = -1
Bye
- strlen(s): kitne characters (\0 nahi). Return type size_t — printf ke liye %zu ya cast.
- strcpy(dst, src): copy (destination pehle). Destination ki size check tumhe khud karni hai!
- strcat(dst, src): jodna (append) — dst mein jagah honi chahiye dono ka.
- strcmp(a, b): 0 = barabar, negative = pehla chhota, positive = pehla bada (lexicographic).
Palindrome program — string manipulation
#include <stdio.h>
#include <string.h>
int main() {
char s[] = "madam";
int n = strlen(s), flag = 1;
for (int i = 0; i < n / 2; i++)
if (s[i] != s[n - 1 - i]) { flag = 0; break; }
printf("%s is %s\n", s, flag ? "Palindrome" : "Not Palindrome");
return 0;
}
Output: madam is Palindrome
// String ↔ number conversion (bonus, interview favourite)
#include <stdio.h>
#include <stdlib.h>
int main() {
char num[] = "42";
int x = atoi(num); // string → int
printf("%d + 8 = %d\n", x, x + 8);
char back[10];
sprintf(back, "%d", x * 2); // int → string
printf("back = %s\n", back);
return 0;
}
Output:
42 + 8 = 50
back = 84
String functions ka pattern: length nikalo, loop chalao, compare/transform karo. Reversal, palindrome, vowel count, word count — sab isi formula se bante hain. Ek baar likh lo, baaki sab apne aap aayenge.
Exercise
Question: String ke end mein kaunsa special character hota hai? (backslash ke saath — zero)
Question: strlen("DSWallah") kitna return karega? Sirf number daalo.
Question: strcmp jab dono strings bilkul barabar hon toh kya return hota hai? Sirf number daalo.
Question: Do strings ko compare karne sahi function ka naam? (== / strcmp)
Common mistakes
- == se string compare kar lena: s1 == s2 address compare karta hai, content nahi. Comparison ke liye strcmp(s1, s2) == 0 — hamesha.
- Array size aur string length mein confusion: char s[20] = "abc" — length 3, size 20. Buffer operations mein size se kaam hota hai, strlen se logic se.
- strcat/strcpy pe buffer size na sochna: Destination ki jagah check kiye bina = memory overwrite. Hamesha socho: dst mein total length kitni fit hogi?
Naam, mobile number, OTP — palindromes roz aate hain (madam, 121). Wahi logic C mein 5 line ka hai:
#include <stdio.h>
#include <string.h>
int main() {
char s[] = "121";
int n = strlen(s), ok = 1;
for (int i = 0; i < n / 2; i++)
if (s[i] != s[n-1-i]) ok = 0;
printf("%s palindrome? %s\n", s, ok ? "YES" : "NO");
return 0;
}
Output: 121 palindrome? YES- TCS NQT: strlen/strcpy/strcmp output + \0 concept — 1-2Q.
- College exam: palindrome, reverse string, vowel count program likhwana.
- Interview: gets() vs fgets(), == vs strcmp — dono classic questions.
- Trap: char s[5] = "hello" — \0 ke liye jagah nahi, overflow warning aata hai.
Strings clear. Agla lesson — Functions — mein dekhenge code ko chhote chhote modules mein kaise toda jaata hai.