दिलचस्प पोस्ट
PhantomJS को HTTPS साइट खोलने में विफल XML और XSLT को बदलने के लिए मैं जावास्क्रिप्ट का उपयोग कैसे करूं? क्लाउड-इनट स्टार्टअप स्क्रिप्ट मैं हर बार अपने EC2 इंस्टेंस बूट को कैसे चलाऊँ? mysql एक श्रृंखलाबद्ध सरणी के भीतर क्वेरी का चयन करें टास्क की गतिविधि स्टैक देखें Facet_wrap और तराजू = "मुक्त" के साथ व्यक्तिगत अक्ष की सीमा सेट करना ggplot2 में डीडीडी में सभी स्तरों पर वर्तमान उपयोगकर्ता जानकारी कैसे पारित करें कॉलिगनिटर लाइब्रेरी के रूप में मेलजेट एपीआई v3 रैपर को एकीकृत करना लंबे समय तक विस्तृत प्रारूप में डेटा कैसे आकार देना है? जावा में बाइट्स -128 से 127 की सीमा क्यों है? XSD फ़ाइल के विरुद्ध XML फ़ाइल को मान्य करने का सबसे अच्छा तरीका क्या है? दो स्ट्रिंग्स के बीच सामान्य ऑप्शन का पता लगाएं डबल एस्केपिंग खतरनाक सक्षम है? मैं उद्देश्य-सी में वर्ग-स्तरीय गुणों को कैसे घोषित करूं? विंडोज पर पायथन सरल एचटीटीपी सर्वर सेट करें

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

सबसे पहले, कुछ पृष्ठभूमि: मैं एक बाहरी फ़ाइल से पूर्णांकों की सूची प्राप्त करने की कोशिश कर रहा हूं और उन्हें एक सरणी में डाल रहा हूं। मैं रेखा से इनपुट फ़ाइल लाइन को पार्स करने के लिए 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 )।