पाठ 18 / 36
स्ट्रिंग इनपुट पढ़ना
scanf के छिपे खतरे, और fgets ज़्यादा सुरक्षित क्यों है।
scanf("%s", ...) की कोई सीमा नहीं
scanf("%s", buf) व्हाइटस्पेस तक पढ़ता है और कोई सीमा जाँच नहीं करता — लंबे इनपुट पर buf ओवरफ़्लो होता है। यह पहले स्पेस पर भी रुक जाता है, इसलिए पूरा वाक्य नहीं पढ़ पाता।
fgets पूरी लाइन सुरक्षित तरीके से पढ़ता है
fgets एक साइज़ सीमा लेता है और newline तक पढ़ता है, स्पेस सहित।
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() से हटा दें।