🔤
Strings

Strings in C

Character Arrays
💡 C mein string ek train ki tarah hai — bogies (characters) ek line mein lagi hain, aur ek special "END" board (\0 null character) batata hai train yahi khatam ho gayi. Java ke "String" object jaisa kuch alag se nahi hota.

C mein koi built-in "string" type nahi hota — string sirf ek char array hai jiske end mein ek special null character '\0' hota hai, jo batata hai string yahi khatam. "Hello" actually memory mein 6 characters leta hai: H, e, l, l, o, \0.

String literal ("Hello") likhte waqt compiler automatically \0 add kar deta hai. Lekin manually char array banate waqt, tumhe khud is baat ka khayal rakhna padta hai ki array mein \0 ke liye jagah ho — warna functions jaise printf("%s") kabhi rukenge nahi (memory mein tab tak padhte rahenge jab tak koi \0 na mile).

Do tareeke se string bana sakte ho: char str[] = "Hello"; (modifiable, stack par) ya char *str = "Hello"; (string literal, jise modify karna undefined behavior hai — read-only memory mein hota hai).

char str1[6] = "Hello";      // H e l l o \0 — 6 bytes
char str2[] = "Hello";        // size khud calculate ho jaati hai (6)
char *str3 = "Hello";         // pointer to string literal (read-only!)

printf("%s\n", str1);         // Hello
printf("%c\n", str1[0]);      // H
// str3[0] = 'J';              // UNDEFINED BEHAVIOR — literal modify mat karo
🔤
C mein string ek train ki tarah hai — bogies (characters) ek line mein lagi hain, aur ek special "END" board (\0 null character) batata hai train yahi khatam ho gayi. Java ke "String" object jaisa kuch alag se nahi hota.
1 / 8
⚡ Quick Recap
  • String = char array + terminating '\0'
  • char arr[] = "text" modifiable hai, char *p = "text" read-only
  • \0 na ho to string functions kabhi rukenge nahi — buffer overrun
Is page mein (2 subtopics)

Multiple strings store karne ke do tareeke hain: char names[3][20] (2D array — fixed row size, har string same max length ki jagah leta hai, chahe use kare ya na kare) ya char *names[3] (array of pointers — har string apni exact required memory leta hai, zyada memory-efficient).

char names1[3][20] = {"Aarav", "Riya", "Zoya"}; // fixed 20 bytes per row

char *names2[3] = {"Aarav", "Riya", "Zoya"};      // har ek apni size ka

printf("%s\n", names1[0]); // Aarav
printf("%s\n", names2[0]); // Aarav (same output, alag memory layout)
💡Tip: char *names[] zyada memory-efficient hai jab strings ki lengths bahut alag-alag hon, lekin uska data read-only hota hai (string literals). Modify karne wale strings ke liye 2D array behtar hai.

scanf("%s", str) sirf spaces tak padhta hai (poora sentence nahi le sakta) aur buffer size check nahi karta — dangerous hai. fgets(str, size, stdin) ek poori line (spaces samet) padh sakta hai, aur size limit ke saath safe bhi hai.

char name[50];

// scanf: sirf ek word tak
// scanf("%s", name);  // "Aarav Kumar" input do to sirf "Aarav" milega

// fgets: poori line, safe
fgets(name, sizeof(name), stdin);  // "Aarav Kumar\n" — poora milega

// fgets newline bhi include kar leta hai — usse hataana pad sakta hai:
name[strcspn(name, "\n")] = '\0';
⚠️Common Mistake: scanf("%s", name) bina size limit ke buffer overflow ka risk rakhta hai — user input ke liye hamesha fgets() prefer karo.