c - strncpy and using sizeof to copy maximum characters -


मैं नीचे कोड का उपयोग कर रहा हूं

  चार कॉल [64] = {'\ 0 '} / * साफ बफर * / strncpy (कॉल, info.called, sizeof (कॉल));  

मैं हमेशा ओवरफ़्लो की सुरक्षा के लिए गंतव्य के आकार का उपयोग करता हूं, स्रोत से अधिक गंतव्य से अधिक है। इस तरह मैं बफर ओवरफ्लो को रोका जा सकता हूं क्योंकि यह गंतव्य जितना भी संभाल सकता है उतना जितना भी कॉपी होगा।

लेकिन अब मैं सोच रहा हूं कि यह गंतव्य को समाप्त कर देगा।

एक जोड़ी मामलों की

1) यदि स्रोत अधिक है मैं ऐसा कर सकता हूं:

  कॉल [strlen (call) - 1] = '\ 0'; / * अंतिम तत्व पर एक नल सम्मिलित करें। * /  

2) यदि स्रोत गंतव्य से कम है कॉल 64 बाइट्स है, और मैं 50 बाइट प्रतिलिपि बनाता हूं क्योंकि यह स्रोत का आकार है। क्या यह स्वतः 51 तत्वों में अशक्त रखेगा?

किसी भी जानकारी के लिए बहुत धन्यवाद,

यदि स्रोत की लंबाई से कम तीसरी पैरामीटर strncpy के रूप में पारित अधिकतम संख्या गंतव्य को समाप्त नहीं करेगा, अन्यथा - नहीं।

यदि स्रोत बराबर या अधिक है गंतव्य की तुलना में लंबाई में - इसके साथ निपटने के लिए आपकी समस्या है जैसे आप सुझाव दे रहे हैं - कॉलिंग स्ट्रेलन () - काम नहीं करेगा क्योंकि बफर निरर्थक नहीं होगा और आप अपरिभाषित व्यवहार में भाग लेंगे।

आप एक बड़ा बफर आवंटित कर सकते हैं:

< प्री> चार बफर [बफर साइज़ + 1]; Strncpy (बफर, स्रोत, बफर साइज़); * (बफर + बफर साइज़) = 0;

Comments

Popular posts from this blog

email - PHP mail error ... failed to open stream : permission denied -

c# - ListView onScroll event -

c - Linux mmap() error -