दिलचस्प पोस्ट
"चेतावनी: हेडर सूचना को संशोधित नहीं किया जा सकता है -" त्रुटि द्वारा पहले ही भेजे गए हेडर " जावास्क्रिप्ट में दिए गए स्ट्रिंग के सभी क्रमचिह्नों को खोजने के लिए कोई पूर्व-निर्मित पद्धति है? प्रोटोटाइपिकल विरासत – लेखन चयन मूल्य के आधार पर फ़ील्ड दिखाएँ / छुपाएं स्ट्रीम को ब्राउज़र से सर्वर पर रिकॉर्ड किया गया मैं एक ही पृष्ठ पर jQuery के विभिन्न संस्करणों को कैसे चलाऊं? कैसे एक कंबोडिया के लिए एक सूची बाँध? (Winforms) JSF2.0 से दृश्य परिभाषा भाषा के रूप में जेएसपी पर क्यों फेसलेट पसंदीदा हैं? मोबाइल डिवाइस से स्थानीय होस्ट वेबसाइट देखना जेबब्रेक डिवाइस पर प्रोग्रामेटिक रूप से एसएमएस भेजें एमएस विज़ुअल सी ++ में वीएलएएस (चर लंबाई एरेज़) को सक्षम करना? कार्यात्मक प्रोग्रामिंग: "अनुचित सूची" क्या है? गतिशील जेएसएन डेटा से एक बल का निर्देशित ग्राफ पर लिंक अपडेट करना सीएसएस पाठ-सजावट रंग को रेखांकित एक हैशमैप और ट्रीमार्क के बीच अंतर क्या है?

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

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

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

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

 getline(&storage, &s, input) 

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

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

बफर में केवल आखिरी पंक्ति ही होगी जिसमें आपने 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 )।