आप कार्यों की sprintf
परिवार के लिए देख रहे हैं। उनके सामान्य प्रारूप है:
char output[80];
sprintf(output, "No record with name %s found\n", inputString);
हालांकि, sprintf
अपने आप में अत्यंत खतरनाक है। यह बफर ओवररन्स नामक चीज़ के लिए प्रवण है। इसका अर्थ यह है कि स्प्रिंटफ को यह नहीं पता कि output
स्ट्रिंग जो आप प्रदान करते हैं, वह कितनी बड़ी है, इसलिए यह स्वेच्छा से उपलब्ध होने से अधिक डेटा लिखेगा। उदाहरण के लिए, इस सफाई से संकलन होगा, लेकिन वैध स्मृति — के ऊपर लिख देगा और वहाँ sprintf
पता है कि यह कुछ भी गलत कर रहा है यह बताने के लिए कोई रास्ता नहीं है:
char output[10];
sprintf(output, "%s", "This string is too long");
समाधान snprintf
के रूप में एक समारोह है, जो लंबाई लेता है उपयोग करने के लिए है पैरामीटर:
char output[10];
snprintf(output, sizeof output, "%s", "This string is too long, but will be truncated");
या, यदि आप एक विंडोज सिस्टम पर कर रहे हैं, _sntprintf
वेरिएंट और दोस्तों, जो या तो इनपुट या आउटपुट तार की उमड़ती के खिलाफ की रक्षा का उपयोग करें।
स्रोत
2009-11-20 16:32:57
खुद पर एक एहसान करो और Kernigham और रिची द्वारा खरीद "सी प्रोग्रामिंग भाषा" जाना मिल जाएगा हूँ। – Pete
धन्यवाद पीट, मैं करूँगा। – itsaboutcode
http://www.eskimo.com/~scs/cclass/cclass.html –