5.1.20 · D2 · HinglishC Programming

Visual walkthroughString handling — char arrays, null terminator, strcpy, strcat, strlen, sprintf (dangers)

2,450 words11 min read↑ Read in English

5.1.20 · D2 · Coding › C Programming › String handling — char arrays, null terminator, strcpy, strc

Code chhuney se pehle, ek promise un words ke baare mein jo hum use karenge:

Hamara running example, jo neeche har figure mein use hoga:

char c[10] = "ab";   // hum karenge  strcat(c, "cd")  aur milega "abcd"
char src[3] = "cd";  // woh chhoti string jise hum append karenge

Step 1 — Memory lay out karna: "ab" actually kaisa dikhta hai

char c[10] = "ab"; box 0 ko a se, box 1 ko b se, box 2 ko STOP se bharta hai, aur — kyunki array text se bada hai — boxes 3–9 ko leftover junk ke roop mein chhodta hai (jo bhi memory mein pehle se tha).

Figure — String handling — char arrays, null terminator, strcpy, strcat, strlen, sprintf (dangers)

Step 2 — strcat end dekh nahi sakta; use walk karna padta hai

Figure — String handling — char arrays, null terminator, strcpy, strcat, strlen, sprintf (dangers)

Step 3 — Purane STOP ko pehle naye letter se overwrite karna

Figure — String handling — char arrays, null terminator, strcpy, strcat, strlen, sprintf (dangers)

Step 4 — Copy karte rehna, dono counters ko saath saath aage badhana

Figure — String handling — char arrays, null terminator, strcpy, strcat, strlen, sprintf (dangers)

Step 5 — Final STOP aata hai, aur loop quit karta hai

Figure — String handling — char arrays, null terminator, strcpy, strcat, strlen, sprintf (dangers)

Step 6 — Degenerate case: src empty hai ("")

Figure — String handling — char arrays, null terminator, strcpy, strcat, strlen, sprintf (dangers)

Step 7 — Disaster case: dst ek box chhhota hai

Figure — String handling — char arrays, null terminator, strcpy, strcat, strlen, sprintf (dangers)

Ek-picture summary

Figure — String handling — char arrays, null terminator, strcpy, strcat, strlen, sprintf (dangers)

Yeh single figure strcat(c,"cd") ki poori life stack karta hai: (1) do rows apne STOP boxes ke saath laid out, (2) arrow dst ko uska STOP dhundne ke liye walk karta hua, (3) woh STOP erase ho raha hai, (4) cd andar aa raha hai, (5) ek final STOP joined word abcd ko close kar raha hai — saath mein danger line marked hai jahan ek chhhota buffer apne last legal box ke baad spill karta.

Recall Feynman retelling — ek kahani ki tarah batao

Mailboxes ki do rows imagine karo. Pehli ab spell karti hai aur bilkul baad mein ek lal STOP flag hai, phir kuch empty spare boxes hain. Doosri cd spell karti hai apne khud ke STOP flag ke saath. Main ek lamba word chahta hoon. Pehle main row one mein chalta hoon, box by box, jab tak uska STOP flag na mile — woh flag mujhe batata hai "word yahan khatam hota hai." Main us STOP box par khada hoon. Ab main row two ko row one mein copy karna shuru karta hoon usi STOP box se shuru karke: main purane flag ke upar c paint karta hoon (seam mein koi flag nahi hona chahiye, warna word bahut jaldi khatam ho jaayega), phir d agale box mein, phir main row two ka STOP flag naye single ending ke roop mein copy karta hoon. Ho gaya: abcd bilkul end mein exactly ek flag ke saath. Lekin agar row one mein sirf chhe boxes ki jagah hoti aur mera joined word plus flag aath ki zaroorat hoti, toh main saat aur aath number boxes mein paint karta rehta — woh boxes jo mere padosi ke hain. C mein koi mera haath nahi rokta. Woh padosi-pe-likhna buffer overflow hai, aur yeh sab is baat ko bhoolne se aata hai ki STOP flag ke liye ek extra box ki zaroorat hoti hai.

Connections

  • Pointers in Cstrcat sirf addresses receive karta hai, isliye woh sizes nahi jaanta.
  • Arrays vs Pointers — array c[10] compile time par apna size jaanta hai; strcat ke andar pointer nahi jaanta.
  • Buffer Overflow & Memory Safety — Step 7 classic exploit ka janam hai.
  • Undefined Behaviour in C — box 9 ke baad likhna UB hai; machine tumhe warn nahi karegi.
  • Time Complexity — find-the-end walk strcat ko banata hai; loop mein, yeh Shlemiel bug hai.
  • printf format specifierssnprintf (safe fix) %s %d %f share karta hai.