# स्ट्रिंग इनपुट पढ़ना — C प्रोग्रामिंग

Source: https://www.geekswithgeeks.com/hi/c/c-string-input

> scanf के छिपे खतरे, और fgets ज़्यादा सुरक्षित क्यों है।

## scanf("%s", ...) की कोई सीमा नहीं

`scanf("%s", buf)` व्हाइटस्पेस तक पढ़ता है और **कोई सीमा जाँच नहीं करता** — लंबे इनपुट पर `buf` ओवरफ़्लो होता है। यह पहले स्पेस पर भी रुक जाता है, इसलिए पूरा वाक्य नहीं पढ़ पाता।

## fgets पूरी लाइन सुरक्षित तरीके से पढ़ता है

`fgets` एक साइज़ सीमा लेता है और newline तक पढ़ता है, स्पेस सहित।

```c
char line[50];
printf("Enter your name: ");
fgets(line, sizeof(line), stdin);

// fgets keeps the trailing '\n' -- strip it:
line[strcspn(line, "\n")] = '\0';
printf("Hi, %s!\n", line);
```

## scanf और fgets को मिलाना

`scanf("%d", &n)` इनपुट बफर में बचा हुआ `\n` छोड़ देता है, जिसे अगला `fgets` तुरंत खाली लाइन के रूप में पढ़ लेता है। पहले उसे `getchar()` से हटा दें।
