प्रश्न में सरल उदाहरण के लिए, दोनों कॉल के बीच सुरक्षा में बहुत अंतर नहीं हो सकता है। हालांकि, सामान्य मामले में snprintf()
शायद अधिक सुरक्षित है। एक बार आपके पास एकाधिक रूपांतरण विनिर्देशों के साथ एक अधिक जटिल प्रारूप स्ट्रिंग हो जाने के बाद यह सुनिश्चित करने के लिए कठिन (या असंभव के करीब) हो सकता है कि आपके पास बफर लंबाई अलग-अलग रूपांतरणों के लिए सटीक रूप से जिम्मेदार है - खासकर जब पिछले रूपांतरण एक निश्चित संख्या का उत्पादन नहीं करते हैं आउटपुट पात्रों का।
तो, मैं snprintf()
के साथ रहूंगा।
snprintf()
(हालांकि सुरक्षा से संबंधित नहीं) के लिए एक और छोटा सा फायदा यह है कि यह आपको बताएगा कि आपको बफर की कितनी बड़ी आवश्यकता है।
एक अंतिम टिप्पणी - आप snprintf()
कॉल में वास्तविक बफर आकार को निर्दिष्ट करना चाहिए - यह आप के लिए अशक्त टर्मिनेटर के लिए लेखांकन संभाल लेंगे:
snprintf(buff, sizeof(buff), "%s", name);
स्रोत
2011-09-06 07:42:35
# 2 से 'MAXLEN + 1' बदलें और वे सभी मामलों में 'buff' में लिखने में समान होंगे) (स्ट्रेल मान' स्ट्रेल (नाम)> 255') अलग होगा। –