पहली समस्या: क्या कुछ पैरामीटर के साथ फ़ंक्शन को कॉल करना संभव है और यह प्रीप्रोसेसिंग समय पर संकलन के बाद किसी अन्य चीज़ में संशोधित हो जाता है या संकलन समय परप्रीप्रोकैसिंग समय पर "फ़ंक्शन कॉल" को संशोधित करना या संकलन समय
#define func(a,b) func(a,sizeof(a),b)
कुछ सोच सकते हैं कि ऐसी आवश्यकता क्यों उत्पन्न हुई।
असल में मैं विजुअल स्टूडियो 2010 का उपयोग कर विंडोज़ में कोड पोर्ट कर रहा हूं और कुछ ऐसे फ़ंक्शन हैं जो strcpy(), strcat() आदि जैसे बहिष्कृत हैं। यह strcpy_s() के बजाय उपयोग करने के लिए कहता है।
मैं जानता हूँ कि मैं #pragma disable(warning:)
का उपयोग कर इसे दबा दिया जा सकता था या की तरह झंडे उपलब्ध कराने के द्वारा:
_CRT_NONSTDC_NO_DEPRRECATE
_CRT_SECURE_NO_DEPRECATE
_CRT_SECURE_NO_WARNINGS
लेकिन मैं ध्यान नहीं देते या उन्हें दबाने के लिए wan't नहीं।
मैं बस के बजाय का उपयोग करके अनदेखी की स्ट्रिंग को बदलने के लिए करने की कोशिश की:
#define strcpy strcpy_s
यहाँ http://msdn.microsoft.com/en-us/library/td1esda9.aspx के रूप में मैंने पढ़ा तर्क का कोई बेमेल हो अगर मैं दूसरे आर्ग प्रदान नहीं करते हैं।
मेरा मतलब है यह ठीक है, तो मैं इस तरह का उपयोग किया जाना चाहिए:
#define strcpy strcpy_s
strcpy(dest,src);
लेकिन इसकी नहीं। यह अभी भी चेतावनी उत्पन्न करता है। strcpy_s की
परिभाषा है:
errno_t strcpy_s(
char *strDestination,
size_t numberOfElements,
const char *strSource
);
2 समस्या: पहला तर्क एक गतिशील आबंटित स्मृति तो कैसे मैं स्मृति इस सूचक द्वारा बताया के आकार प्राप्त कर सकते हैं करने के लिए एक सूचक है। हालांकि मैंने पढ़ा कि यह संभव नहीं है लेकिन कुछ रास्ता होना चाहिए (उम्मीद है)।
_countof(var)
क्या है?
कृपया, कृपया ऐसा न करें। या तो अन्य संस्करणों का उपयोग करें या उन चेतावनियों को बंद करें। – doctorlove
1. यह 'strcpy_s' की एकमात्र परिभाषा नहीं है, क्योंकि आपने आसानी से [** टेम्पलेट संस्करण **] छोड़ दिया है (http://msdn.microsoft.com/en-us/library/td1esda9.aspx) जो तय सरणी से आकार कम कर देता है। 2. गतिशील आवंटन के आकार को हासिल करने के लिए कोई * पोर्टेबल * तरीका नहीं है, केवल कच्चे मेमोरी के लिए इसके सूचक को दिया गया है। मैं डॉ के साथ सहमत हूँ। ऐसा मत करो। यदि आप रनटाइम लाइब्रेरी के सुरक्षा संस्करणों का उपयोग करना चाहते हैं, तो * उनका उपयोग करें *। 3. '_countof' है [** यहां दस्तावेज **] (http://msdn.microsoft.com/en-us/library/ms175773.aspx) – WhozCraig
+1 सिर्फ इसलिए कि प्रश्न में संभावित समाधान भयानक हैं ' टी का मतलब यह सवाल बिल्कुल खराब नहीं है। एक उत्तर के रूप में, यदि आपको क्रॉस-प्लेटफ़ॉर्म बनाने की आवश्यकता है तो गैर-मानक फ़ंक्शंस का उपयोग करने से बचें। और भाषा को बहुत मुश्किल से मत लड़ो। – Bathsheba