2011-03-25 11 views
10

मैं इस लाइन का उपयोग कर फ़ाइल में लिखने के लिए एक वर्ण में एक पूर्णांक को बदलने की कोशिश कर रहा हूं:सी त्रुटि: '_itoa' के लिए अपरिभाषित संदर्भ

fputc(itoa(size, tempBuffer, 10), saveFile); 

और मुझे यह चेतावनी और संदेश प्राप्त होता है:

चेतावनी: 'itoa की निहित घोषणा 'xitx27

' _itoa '

के लिए अनिर्धारित संदर्भ मैंने पहले से ही stdlib.h शामिल किया है, और इसके साथ संकलित कर रहा हूं:

gcc -Wall -pedantic -ansi 

किसी भी मदद की सराहना की जाएगी, धन्यवाद।

+1

मुझे लगता है कि यह आपके द्वारा उपयोग की जा रही मानक सी लाइब्रेरी में मौजूद नहीं हो सकता है। यह कोड देखने के लिए कि क्या कोड काम करता है, आप ध्वज '-fpermissive' निर्दिष्ट करने का प्रयास कर सकते हैं। – GWW

+1

"आधिकारिक" मानक पुस्तकालय में 'itoa' के रूप में ऐसा कोई फ़ंक्शन नहीं है। स्पष्ट रूप से आप जिस मानक लाइब्रेरी का उपयोग कर रहे हैं वह 'itoa' प्रदान नहीं करता है। आपका '-पीडेंटिक' और '-ansi' झंडे कुछ भी मदद नहीं करेंगे। काफी विपरीत, वे वास्तव में गैर-मानक कार्यों को छिपाकर चीजों को और खराब कर सकते हैं (मुझे नहीं पता कि वे वास्तव में ऐसा करते हैं या नहीं)। उनके बिना संकलन करने का प्रयास करें। – AnT

उत्तर

22

itoa मानक का हिस्सा नहीं है। मुझे संदेह है कि -ansi आपको इसका उपयोग करने से रोक रहा है, या यह बिल्कुल उपलब्ध नहीं है।

मैं sprintf()

का उपयोग कर आप c99 मानक के साथ जाना है, तो आप जो निश्चित रूप से सुरक्षित है snprintf() उपयोग कर सकते हैं सुझाव है।

char buffer[12]; 
int i = 20; 
snprintf(buffer, 12,"%d",i); 
+1

आपको नकारात्मक संकेत को संभालने के लिए एक बड़ा बफर चाहिए। – RocketRoy

+1

@RocketRoy यह वास्तव में बस एक उदाहरण था। उदाहरण में ''20' मान' char [10] 'में बस ठीक है और वह ओपी का उपयोग कर रहा बफर आकार है। लेकिन हां, एक हस्ताक्षरित 32 बिट int को साइन को संभालने के लिए 'char [12]' की आवश्यकता होगी और '\ 0' –

+1

@BrianRoach जब आप पूरी तरह से सही हों, तो पेस्ट कॉपी करना पसंद करने वाले लोगों के लिए मैंने आकार बदल दिया है उदाहरण में बफर। – chacham15

2

यह यहां आपको बताता है कि संकलन चरण के दौरान itoa अज्ञात है: इस समारोह के लिए अपने सिस्टम आप एक हेडर फाइल है कि यह वाणी याद कर रहे हैं पर मौजूद है

warning: implicit declaration of 'itoa'

इसलिए यदि। संकलक तब मानता है कि यह एक ऐसा कार्य है जो तर्कों की एक विशिष्ट संख्या लेता है और int देता है।

लोडर चरण

undefined reference to '_itoa'

से यह संदेश बताते हैं कि यह भी लोडर पुस्तकालयों वह की जानता है में से किसी में इस तरह के एक समारोह नहीं मिल रहा है।

तो आपको शायद मानक फ़ंक्शन द्वारा itoa को प्रतिस्थापित करने के लिए ब्रायन की सलाह का पालन करना चाहिए।

संबंधित मुद्दे