c - Why is fwrite writing more than I tell it to? -


  फ़ाइल * बाहर = fopen64 ("text.txt", "w +"); अहस्ताक्षरित int लिखना; Char * outbuf = नया चार [लिखें]; // भर आउटबफ प्रिंटफ़ ("% i \ n", ftello64 ​​(बाहर)); fwrite (outbuf, sizeof (चार), लिखने, बाहर); printf ( "% i \ n", लिखने); printf ( "% i \ n", ftello64 ​​(बाहर));  

आउटपुट:

  0 25755 25868  

क्या चल रहा है? लिखना 25755 पर सेट है, और मैं उस फ़ाइल को कई बाइट लिखने के लिए fwrite को बताता हूं, जो कि शुरुआत में है, और फिर 25755 के अलावा एक स्थिति पर आई

यदि आप डॉसिश सिस्टम (कहते हैं, विंडोज) पर हैं और फ़ाइल द्विआधारी मोड में नहीं खुलती है, तो लाइन-एंडिंग स्वचालित रूप से कनवर्ट हो जाएगी और प्रत्येक" लाइन "एक जोड़ देगा बाइट।

इसलिए, "wb" को सिर्फ "w" के रूप में मोड के रूप में निर्दिष्ट करें @ केएफ़ के रूप में बताएं इसका यूनिक्स जैसी प्लेटफार्मों पर कोई प्रभाव नहीं पड़ेगा और दूसरों पर सही काम करेगा। उदाहरण के लिए:

  #include & lt; stdio.h & gt; # परिभाषित एलएफ 0x0a int मुख्य (शून्य) {char x [] = {एलएफ, एलएफ}; FILE * out = fopen ("test", "w"); Printf ("% d", ftell (बाहर)); फ़िलिट (एक्स, 1, आकारफ (एक्स), आउट); Printf ("% d", ftell (बाहर)); fclose (बाहर); वापसी 0; }  

वीसी ++ के साथ:

 सी: \ Temp> cl yc माइक्रोसॉफ्ट (नि।) 32-बिट सी / सी ++ अनुकूलन कम्पाइलर संस्करण 15.00.21022.08 80x86 कॉपीराइट के लिए (सी ) माइक्रोसॉफ़्ट कॉर्पोरेशन। सर्वाधिकार सुरक्षित। Y.c माइक्रोसॉफ्ट (आर) इंक्रीमेंटल लिंकर संस्करण 9.00.21022.08 कॉपीराइट (सी) माइक्रोसॉफ्ट कॉर्पोरेशन। सर्वाधिकार सुरक्षित। /out:y.exe C: \ Temp> y.exe 04 

साइगविन जीसीसी के साथ:

 / cygdrive / c / Temp $ gcc yc -o y.exe / cygdrive / C / Temp $ ./y.exe 02 

Comments

Popular posts from this blog

MySql variables and php -

c# - How can I find out if there are windows above a control? -

javascript - Classic ASP "ExecuteGlobal" statement acting differently on two servers -