C - How to write linked list pointer contents to a text file -


मेरे पास एक प्रोग्राम है जिसमें पॉइंटर्स की एक सरणी है:

  INTLIST * myArray [countOfRows];  

प्रत्येक myArray पॉइंटर एक लिंक्ड सूची में इंगित करता है, मूलतः यह एक एम * एन मैट्रिक्स बन जाता है।

उदाहरण के लिए:

  3 2 1 2 1 0 9 8  

अतः myArray [0] एक लिंक्ड सूची है जिसके साथ 3-> gt ; 2- & gt; 1 और myArray [1] एक लिंक्ड सूची है जिसमें 2- & gt; 1- & gt; 0 .. और इसी तरह से। मेरे पास एक फ़ंक्शन है जो मैट्रिक्स प्रिंट करता है, जो मूल रूप से यह करता है:

  के लिए (int i = 0; i & lt; countOfRows; i ++) list_print (myArray [i]);  

और फिर मेरी list_print फ़ंक्शन ऐसा है:

  void list_print (INTLIST * list) {/ * यह फ़ंक्शन केवल लिंक्ड सूची को प्रिंट करता है * / INTLIST * temp = NULL; / Temp = सूची के प्रत्येक नोड के माध्यम से / टेप पॉइन्टर / अपने आंकड़ा मूल्य को प्रिंट करने के लिए * / (temp = list; temp! = Null; temp = temp- & gt; अगला) {printf ("% d", temp) - & gt; गृहीत); // प्रिंट डेटामूल} printf ("\ n"); }  

यह सब बहुत अच्छा और ठीक काम है, (मुझे पता है कि मैं अनुकूलन कर सकता हूं और साफ कर सकता हूं और मैं ऐसा करने का वादा करता हूं)। अब मेरा अगला प्रश्न मुझे इस मैट्रिक्स को एक पाठ फ़ाइल में लिखने की आवश्यकता है। इसलिए मैंने इसे करने की कोशिश की:

  char * outputFileName = "out.txt"; FILE * ofp; Ofp = fopen (outputFileName, "w"); यदि (ofp == NULL) {printf ("लिखने योग्य फ़ाइल नहीं खोला जा सकता!"); वापसी -1; } के लिए (i = 0; i & lt; fileLineCount; i ++) {fprintf (ofp, list_print (aList [i])}}  

लेकिन मैं इसे इसे आसान नहीं लेता। मुझे एक पाठ फ़ाइल में इसे कैसे प्रिंट करना है ...

धन्यवाद

उदाहरण के रूप में दिखाए अनुसार FILE * पैरामीटर का उपयोग करके अपने list_print फ़ंक्शन में fprintf फ़ंक्शन का उपयोग करें:

  Void list_print (INTLIST * list, FILE * fp) {/ * यह फ़ंक्शन केवल लिंक्ड सूची * / INTLIST * temp = NULL; // temp पॉइंटर को सूची के प्रत्येक नोड के माध्यम से सूची के शीर्ष पर प्रिंट करता है * इसके डेटामेट मान को छपाई * / के लिए (temp = list; temp! = NULL; temp = temp- & gt;; अगला) {fprintf (fp, "% d", temp- & gt; डेटा); // print datum value} fprintf (fp, \ N ");}  

ऐसा किया जाएगा:

  int main () {FILE * fp; fp = fopen (" data.txt " "," डब्ल्यू "); के लिए (i = 0; i & lt; fileLineCount; i ++) { List_print (alist [i], fp); } Fclose (fpose); }  

या

यदि आप लिंक्ड सूची के बाइनरी डंप मेमोरी से डिस्क पर रखना चाहते हैं (यह इसे समझा देने का आसान तरीका है), मेरी ओर से सिर:

<पूर्व> के लिए (i = 0; i & lt; फ़ाइल लिनकाउंट; i ++) {fwrite (alist [i], आकार (alist [i]), 1, ofp); }

तब इसे पढ़ने से,

  के लिए (i = 0; i & lt; फ़ाइल लिनकाउंट; i ++) {fread (और alist [i], आकार (अलविदा [i]), 1, ofp); }  

संपादित करें: मैं उपरोक्त को शामिल करने में संकोच किया था, लेकिन paxdiablo में एक दोष मेरे fread (...) और fwrite (...) उपरोक्त कोड, और यह महसूस किया कि वह सही है। जब लिंक्ड सूची के द्विआधारी लिखते हैं, तो अगली बार पढ़ते समय लिंक-सूची में मेमोरी पते के संदर्भ अमान्य होंगे। धन्यवाद paxdiablo !


Comments

Popular posts from this blog

oracle - The fastest way to check if some records in a database table? -

php - multilevel menu with multilevel array -

jQuery UI: Datepicker month format -