यह चेतावनी जीसीसी आपको यह बताने का तरीका है कि यह printf शैली फ़ंक्शन (printf, fprintf ... आदि) में प्रारूप स्ट्रिंग तर्क को सत्यापित नहीं कर सकता है। यह चेतावनी तब उत्पन्न होती है जब संकलक मैन्युअल रूप से स्ट्रिंग में नहीं देख सकता है और यह सुनिश्चित करता है कि रनटाइम के दौरान आप सबकुछ आगे बढ़ेंगे। आइए कुछ उदाहरण देखें।
केस 1. इस स्ट्रिंग संकलन समय पर सत्यापित किया जा सकता और संकलक चेतावनी के बिना यह अनुमति देगा:
printf("This string has no format");
केस 2: इस मामले के लिए, संकलक पता लगा सकते हैं कि आप एक है प्रारूप विनिर्देशक और एक अलग चेतावनी उठाएगा। मेरी मशीन पर यह "चेतावनी: प्रारूप के लिए बहुत कम तर्क" कहा।
// This will most probably crash your machine
printf("Not a safe string to %s");
प्रकरण 3. अब यह कुछ हद तक अपने मामले है। आप रनटाइम पर उत्पन्न स्ट्रिंग ले रहे हैं और इसे प्रिंट करने का प्रयास कर रहे हैं। आपको जो चेतावनी मिल रही है वह संकलक आपको चेतावनी देता है कि स्ट्रिंग में प्रारूप विनिर्देशक हो सकता है। उदाहरण के लिए कहें "खराब% sdata"। इस मामले में, रनटाइम% s से मेल खाने के लिए एक गैर-मौजूदा तर्क तक पहुंचने का प्रयास करेगा। इससे भी बदतर, यह उपयोगकर्ता आपके प्रोग्राम का शोषण करने का प्रयास कर सकता है (इसे पढ़ने के लिए सुरक्षित नहीं है जो डेटा पढ़ने के लिए)।
char str[200];
scanf("%s", str)
printf(str)
स्रोत
2010-12-11 22:37:45
क्या 'शामिल imp' करता है? – casablanca
क्या होता है यदि आप 'fputs (imp, fil) के साथ fprintf को प्रतिस्थापित करते हैं; '? – pmg
एक स्ट्रिंग, मान लें कि इस आईपी = "टेस्ट" की तरह कुछ; – Unzi