दिलचस्प पोस्ट
मेरा सॉर्टिंग लूप एक तत्व को जोड़ने के लिए क्यों लगता है जहां यह नहीं होना चाहिए? ऑब्जेक्ट == रिक्त या शून्य == ऑब्जेक्ट? जावा: सीपीयू कोर के अनुसार थ्रेड्स कैसे स्केल करें? दो डेटाबेस के बीच MySQL डेटाबेस समन्वयन अक्षम पंक्तियों के साथ एनजी-विकल्प XPath कई टैग चुनने के लिए दिए गए संभाव्यता matlab के साथ यादृच्छिक संख्या उत्पन्न करें डी 3.जेएस वस्तुओं में हाइपरलिंक्स हम FtpWebRequest के साथ अपलोड करने के लिए प्रगति बार कैसे दिखा सकते हैं Rewrite मॉड्यूल का उपयोग कर पृष्ठों से .aspx को हटाने? NSString में प्रतिशत चिह्न कैसे जोड़ें urllib2.HTTP त्रुटि: HTTP त्रुटि 403: निषिद्ध कार्डव्यू लेआउट_विंड = "मैच_पेरेंट" अभिभावक रीसाइक्लरदृश्य चौड़ाई से मेल नहीं खाता स्क्रॉलबार का उपयोग किए बिना सामग्री के अनुसार आइफ्रेम स्वतः ऊंचाई समायोजित करें? गतिशील रूप से वेबसाइट फ़ेविकॉन बदलना

सी गेटलाइन () – कैसे बफर के साथ निपटने के लिए / कैसे सरणी में मूल्यों की अज्ञात संख्या को पढ़ने के लिए

सबसे पहले, कुछ पृष्ठभूमि: मैं एक बाहरी फ़ाइल से पूर्णांकों की सूची प्राप्त करने की कोशिश कर रहा हूं और उन्हें एक सरणी में डाल रहा हूं। मैं रेखा से इनपुट फ़ाइल लाइन को पार्स करने के लिए getline का उपयोग कर रहा हूं:

int lines = 0; size_t * inputBuffer = (size_t *) malloc(sizeof(size_t)); char * storage = NULL; 

मैं कॉललाइन को इतना पसंद कर रहा हूं:

 getline(&storage, &s, input) 

मैंने गेटलाइन पर मैन पेज से सुना है कि यदि आप size_t * बफर प्रदान करते हैं, तो जब आप बाइट आवंटन से अधिक हो जाते हैं तो आप इसे अपने लिए पुनः प्राप्त कर सकते हैं। मेरा सवाल है, आप इस बफर का उपयोग किस लिए कर सकते हैं? क्या यह उन सभी आइटमों में शामिल होगा जिन्हें आप getline () के साथ पढ़ते हैं? क्या यह बफर से पढ़ना आसान है, या किसी भिन्न तरीके से इनपुट को पार करने के लिए जब इन पूर्णांक को सरणी में डालते हैं? धन्यवाद!

वेब के समाधान से एकत्रित समाधान "सी गेटलाइन () – कैसे बफर के साथ निपटने के लिए / कैसे सरणी में मूल्यों की अज्ञात संख्या को पढ़ने के लिए"

बफर में केवल आखिरी पंक्ति ही होगी जिसमें आपने getline साथ पढ़ा होगा इसका उद्देश्य सिर्फ अपने कोड से स्मृति को प्रबंधित करने के प्रयास का थोड़ा सा लेने के लिए है

क्या होगा यदि आप बार-बार getline कॉल getline , इसे वही बफर बार-बार पास करना, यह है कि बफ़र आपकी फ़ाइल की सबसे लंबी रेखा की लंबाई तक विस्तार करेगा और वहां रहने के लिए। प्रत्येक कॉल इसकी सामग्री को अगली पंक्ति के साथ बदल देगी।

आप इसे size_t* नहीं प्रदान कर रहे हैं, आप इसे char* दे रहे हैं

यह getline का सही उपयोग नहीं है मैं सावधानी से अपने मैन पेज को ध्यान से पढ़ने का सुझाव देता हूं

आप कुछ कोड की तरह हो सकता है

 FILE *inputfile=fopen("yourinput.txt", "r"); size_t linesiz=0; char* linebuf=0; ssize_t linelen=0; while ((linelen=getline(&linebuf, &linesiz, inputfile)>0) { process_line(linebuf, linesiz); // etc free(linebuf); linebuf=NULL; } 

बीटीडब्ल्यू, आप (और शायद बेहतर होना चाहिए) डाल दिया

  free(linebuf); linebuf=NULL; 

while लूप के बाद (लाइन बफर को एक पंक्ति से अगले में रखने के लिए), और ज्यादातर मामलों में ऐसा करना बेहतर होता है ( getline से लगातार getline -एस से getline )।