<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[fread gibt mehr zurück als in der Datei drin ist.]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe ein ganz einfaches Progrämmchen, mit dem ich eine Datei von der Platte auslese und im Konsolenfenster ausgebe:</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

int main(int argc, char *argv[])
{

	FILE * pFile;
	long lngFileLen = 0;
	size_t stBytesRead;
	char * chrBuffer;

// open file
	cout &lt;&lt; &quot;INFO\tOpen file&quot; &lt;&lt; endl;
	pFile = fopen(&quot;C:\\Files\\tmp\\FileHandling\\Test.doc&quot;, &quot;r&quot;);
	if (pFile == NULL)
	{
		// error: File not found
		cout &lt;&lt; &quot;ERROR\tFile not found!&quot; &lt;&lt; endl;
		return 1;
	}

// get file size
	fseek(pFile, 0, SEEK_END);	//go to end
	lngFileLen = ftell(pFile);
	fseek(pFile, 0, SEEK_SET);	//go back to end

// read file
	cout &lt;&lt; &quot;INFO\tRead file&quot; &lt;&lt; endl;
	chrBuffer = (char *)malloc(sizeof(char)*lngFileLen);	//malloc buffer
	stBytesRead = fread(chrBuffer, lngFileLen, 1, pFile);	//read into buffer
	if (stBytesRead != lngFileLen)
	{
		cout &lt;&lt; &quot;ERROR\tMore bytes read.&quot; &lt;&lt; endl;
	}

// close file
	cout &lt;&lt; &quot;INFO\tClose file&quot; &lt;&lt; endl;
	fclose(pFile);

// show file content
	cout &lt;&lt; &quot;INFO\tFile content:&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;--------------------------------------------------------------&quot; &lt;&lt; endl;
	cout &lt;&lt; chrBuffer &lt;&lt; endl;
	cout &lt;&lt; &quot;--------------------------------------------------------------&quot; &lt;&lt; endl;

// terminate buffer
	free (chrBuffer);

// exit program
	return 0;
}
</code></pre>
<p>Jetzt gibt er nach dem letzten Zeichen, das ich in die Datei geschrieben habe, immer noch ein paar weiter Zeichen aus.<br />
Wo ist denn der Fehler? Ich habe im Netz gesucht und alle Beispiele machen es auf die mehr oder weniger gleiche Art und Weise.</p>
<p>Gruß<br />
Johnson</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/247125/fread-gibt-mehr-zurück-als-in-der-datei-drin-ist</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 17:39:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/247125.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 06 Aug 2009 11:33:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to fread gibt mehr zurück als in der Datei drin ist. on Thu, 06 Aug 2009 11:33:17 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe ein ganz einfaches Progrämmchen, mit dem ich eine Datei von der Platte auslese und im Konsolenfenster ausgebe:</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

int main(int argc, char *argv[])
{

	FILE * pFile;
	long lngFileLen = 0;
	size_t stBytesRead;
	char * chrBuffer;

// open file
	cout &lt;&lt; &quot;INFO\tOpen file&quot; &lt;&lt; endl;
	pFile = fopen(&quot;C:\\Files\\tmp\\FileHandling\\Test.doc&quot;, &quot;r&quot;);
	if (pFile == NULL)
	{
		// error: File not found
		cout &lt;&lt; &quot;ERROR\tFile not found!&quot; &lt;&lt; endl;
		return 1;
	}

// get file size
	fseek(pFile, 0, SEEK_END);	//go to end
	lngFileLen = ftell(pFile);
	fseek(pFile, 0, SEEK_SET);	//go back to end

// read file
	cout &lt;&lt; &quot;INFO\tRead file&quot; &lt;&lt; endl;
	chrBuffer = (char *)malloc(sizeof(char)*lngFileLen);	//malloc buffer
	stBytesRead = fread(chrBuffer, lngFileLen, 1, pFile);	//read into buffer
	if (stBytesRead != lngFileLen)
	{
		cout &lt;&lt; &quot;ERROR\tMore bytes read.&quot; &lt;&lt; endl;
	}

// close file
	cout &lt;&lt; &quot;INFO\tClose file&quot; &lt;&lt; endl;
	fclose(pFile);

// show file content
	cout &lt;&lt; &quot;INFO\tFile content:&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;--------------------------------------------------------------&quot; &lt;&lt; endl;
	cout &lt;&lt; chrBuffer &lt;&lt; endl;
	cout &lt;&lt; &quot;--------------------------------------------------------------&quot; &lt;&lt; endl;

// terminate buffer
	free (chrBuffer);

// exit program
	return 0;
}
</code></pre>
<p>Jetzt gibt er nach dem letzten Zeichen, das ich in die Datei geschrieben habe, immer noch ein paar weiter Zeichen aus.<br />
Wo ist denn der Fehler? Ich habe im Netz gesucht und alle Beispiele machen es auf die mehr oder weniger gleiche Art und Weise.</p>
<p>Gruß<br />
Johnson</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756244</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Thu, 06 Aug 2009 11:33:17 GMT</pubDate></item><item><title><![CDATA[Reply to fread gibt mehr zurück als in der Datei drin ist. on Thu, 06 Aug 2009 11:36:51 GMT]]></title><description><![CDATA[<p>Ich kenn mich mit C-Filekrempel nicht so ganz aus - kanns sein dass er wenn er eof liest kein abschließendes '\0' in den Buffer schreibt? bzw. dass du ans ende deines Buffers keine Nullterminierung geschrieben hast?<br />
Schau dir mal die C++ filestreams und std::strings an. Was du da schreibst ist C vermischt mit C++ Ausgaben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756248</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 06 Aug 2009 11:36:51 GMT</pubDate></item><item><title><![CDATA[Reply to fread gibt mehr zurück als in der Datei drin ist. on Thu, 06 Aug 2009 12:11:02 GMT]]></title><description><![CDATA[<p>Die Vermutung von pumuckl ist richtig: fread schreibt kein Nullterminierungszeichen in den Puffer. Der &lt;&lt;-Operator für C-Strings erwartet aber ein solches, um die Stringlänge ermitteln zu können.</p>
<p>Was Du machen könntest, dabei wird aber der Puffer einmal kopiert:</p>
<pre><code class="language-cpp">cout &lt;&lt; std::string( chrBuffer, lngFileLen );
</code></pre>
<p>Das Problem hättest Du bei den binären Lesefunktionen der C++-Streams zwar auch, nichtsdestotrotz ist der Hinweis auf diese vollkommen richtig.</p>
<p>EDIT: Aufruf des string-Konstruktors korrigiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756276</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 06 Aug 2009 12:11:02 GMT</pubDate></item><item><title><![CDATA[Reply to fread gibt mehr zurück als in der Datei drin ist. on Thu, 06 Aug 2009 12:09:35 GMT]]></title><description><![CDATA[<p>Die C-Lösung wäre also, lngFileLen**+1** byte Speicher für den Buffer zu besorgen (manuell. *schauder*) und danach das Nullterminierungszeichen in buffer[lngFileLen] zu schreiben *zehennägelhochroll* <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756282</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 06 Aug 2009 12:09:35 GMT</pubDate></item><item><title><![CDATA[Reply to fread gibt mehr zurück als in der Datei drin ist. on Thu, 06 Aug 2009 12:10:40 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Ich kenn mich mit C-Filekrempel nicht so ganz aus -</p>
</blockquote>
<p>bitte was?</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>kanns sein dass er wenn er eof liest kein abschließendes '\0' in den Buffer schreibt? bzw. dass du ans ende deines Buffers keine Nullterminierung geschrieben hast?</p>
</blockquote>
<p>Kann nicht nur, ist sogar. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>@Johnson:<br />
guckst du hier:<br />
chrBuffer = (char *)malloc(sizeof(char)*lngFileLen <strong>+1</strong>); // oder calloc<br />
if ( chrBuffer == NULL )<br />
{<br />
// error handling or<br />
// hasta la visa!<br />
return 1;<br />
}<br />
<strong>chrBuffer[lngFileLen] = 0;</strong><br />
// ready to go...<br />
stBytesRead = fread(chrBuffer, lngFileLen, 1, pFile);<br />
...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756283</guid><dc:creator><![CDATA[CFile Kumpel]]></dc:creator><pubDate>Thu, 06 Aug 2009 12:10:40 GMT</pubDate></item><item><title><![CDATA[Reply to fread gibt mehr zurück als in der Datei drin ist. on Thu, 06 Aug 2009 12:13:07 GMT]]></title><description><![CDATA[<p>CFile Kumpel schrieb:</p>
<blockquote>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Ich kenn mich mit C-Filekrempel nicht so ganz aus -</p>
</blockquote>
<p>bitte was?</p>
</blockquote>
<p>Hab nie C gelernt, gleich mit C++ angefangen =&gt; C-FILEs erzeugen bei mir nur die &quot;Das ist aber kein C++-Meckermecker&quot;-Reaktion <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756287</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 06 Aug 2009 12:13:07 GMT</pubDate></item><item><title><![CDATA[Reply to fread gibt mehr zurück als in der Datei drin ist. on Thu, 06 Aug 2009 12:18:38 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>CFile Kumpel schrieb:</p>
<blockquote>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Ich kenn mich mit C-Filekrempel nicht so ganz aus -</p>
</blockquote>
<p>bitte was?</p>
</blockquote>
<p>Hab nie C gelernt, gleich mit C++ angefangen =&gt; C-FILEs erzeugen bei mir nur die &quot;Das ist aber kein C++-Meckermecker&quot;-Reaktion <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Und ich dachte immer die wären Teil des C++ Standards und in cstdio zu finden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Danke für die Aufklärung!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756293</guid><dc:creator><![CDATA[Echt nich??]]></dc:creator><pubDate>Thu, 06 Aug 2009 12:18:38 GMT</pubDate></item><item><title><![CDATA[Reply to fread gibt mehr zurück als in der Datei drin ist. on Thu, 06 Aug 2009 12:25:58 GMT]]></title><description><![CDATA[<p>Echt nich?? schrieb:</p>
<blockquote>
<p>Und ich dachte immer die wären Teil des C++ Standards und in cstdio zu finden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>Dass etwas aus historischen Gründen bzw. Kompatibilitätsgründen Teil des Standards ist, heißt nicht dass man es in C++ benutzen sollte. C-FILEs gehören zu den Dingen die man in C++ nicht braucht, bestenfalls vorsichtig benutzen sollte (wenn denn überhaupt) und nicht kennen muss um C++ zu können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756304</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 06 Aug 2009 12:25:58 GMT</pubDate></item><item><title><![CDATA[Reply to fread gibt mehr zurück als in der Datei drin ist. on Thu, 06 Aug 2009 12:30:50 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Echt nich?? schrieb:</p>
<blockquote>
<p>Und ich dachte immer die wären Teil des C++ Standards und in cstdio zu finden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>Dass etwas aus historischen Gründen bzw. Kompatibilitätsgründen Teil des Standards ist, heißt nicht dass man es in C++ benutzen sollte. C-FILEs gehören zu den Dingen die man in C++ nicht braucht, bestenfalls vorsichtig benutzen sollte (wenn denn überhaupt) und nicht kennen muss um C++ zu können.</p>
</blockquote>
<p>Ich finde die nicht so schlecht und haben auch ihre Daseinsberechtigung, da sie etwas ganz anderes als die C++ Streams tun. Und schwerer zu handhaben als die fstreams sind sie auch nicht (für das Einlesen von Binärdaten natürlich, wenn man explizit streams will ist das natürlich etwas ganz anderes).<br />
Den Puffer muss man übrigens auch nicht selbst verwalten (du weißt das, der TO wohl eher nicht), da std::vector&lt;T&gt; auch explizit über ein T* angesprochen werden kann und damit auch in C-APIs übergeben werden kann, kurz: malloc() für Puffer braucht man in C++ nicht wenn man mit C-APIs arbeitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756310</guid><dc:creator><![CDATA[Echt nich??]]></dc:creator><pubDate>Thu, 06 Aug 2009 12:30:50 GMT</pubDate></item><item><title><![CDATA[Reply to fread gibt mehr zurück als in der Datei drin ist. on Thu, 06 Aug 2009 12:42:29 GMT]]></title><description><![CDATA[<p>Echt nich?? schrieb:</p>
<blockquote>
<p>Ich finde die nicht so schlecht und haben auch ihre Daseinsberechtigung, da sie etwas ganz anderes als die C++ Streams tun.</p>
</blockquote>
<p>Das musst Du erläutern. Ich dachte bisher immer, beide Streamgruppen böten (hauptsächlich) Funktionen für die I/O von Text und Funktionen für die I/O von Binärdaten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756318</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 06 Aug 2009 12:42:29 GMT</pubDate></item><item><title><![CDATA[Reply to fread gibt mehr zurück als in der Datei drin ist. on Thu, 06 Aug 2009 23:06:37 GMT]]></title><description><![CDATA[<p>Himmel!!! Ich wollte damit keinen Glaubenskrieg auslösen. Das überlasse ich lieber den Pinguinen und Windoofies. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Ich habe lediglich ein Tutorial durchgemacht, das das Filehandling im C-Stil verwendet. Aber gut. Jetzt bin ich im Bilde. Danke.</p>
<p>Kurz um: Ich habe mir fstreams angeschaut (<a href="http://www.cplusplus.com/reference/iostream/istream/read/" rel="nofollow">read - C++ Reference</a>)und hier passiert genau das Gleiche. Erst</p>
<pre><code>cout &lt;&lt; string (pchrBuffer, lngFileLength) &lt;&lt; endl;
</code></pre>
<p>brachte das richtige Ergebnis.</p>
<p>Und so hab ich es gelöst:</p>
<pre><code>#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

int main()
{
	ifstream ifsFile;
	long lngFileLength;
	char * pchrBuffer;

// open file
	cout &lt;&lt; &quot;INFO\tOpen file&quot; &lt;&lt; endl;
	ifsFile.open (&quot;C:\\tmp\\Test.txt&quot;, ios::binary);
	if (!ifsFile.is_open())
	{
		// error: File not found 
        cout &lt;&lt; &quot;ERROR\tFile not found!&quot; &lt;&lt; endl; 
        return 1;
	}

// get the length of file
	ifsFile.seekg (0, ios::end);
	lngFileLength = ifsFile.tellg();
	ifsFile.seekg (0, ios::beg);
	cout &lt;&lt; &quot;INFO\tFile length:\t&quot; &lt;&lt; lngFileLength &lt;&lt; endl;

// read file
	cout &lt;&lt; &quot;INFO\tRead file&quot; &lt;&lt; endl;
	pchrBuffer = new char[lngFileLength];
	ifsFile.read(pchrBuffer, lngFileLength);

// close file
	cout &lt;&lt; &quot;INFO\tClose file&quot; &lt;&lt; endl;
	ifsFile.close();

// show file content 
	cout &lt;&lt; &quot;INFO\tFile content:&quot; &lt;&lt; endl; 
	cout &lt;&lt; &quot;--------------------------------------------------------------&quot; &lt;&lt; endl; 
	cout &lt;&lt; string (pchrBuffer, lngFileLength) &lt;&lt; endl; 
	cout &lt;&lt; &quot;--------------------------------------------------------------&quot; &lt;&lt; endl; 

// terminate buffer 
	free (pchrBuffer); 

// exit program
	return 0;
}
</code></pre>
<p>Gibt es hier noch Anmerkungen? Ist irgendwas nicht so astrein? Wäre dankbar für jede Kritik. Würde gern wissen, wie es &quot;sicherer&quot; geht. Und ein string-Typ ist mir ja auch viel lieber. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Gruß und gute Nacht<br />
Johnson</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756654</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Thu, 06 Aug 2009 23:06:37 GMT</pubDate></item><item><title><![CDATA[Reply to fread gibt mehr zurück als in der Datei drin ist. on Thu, 06 Aug 2009 23:44:30 GMT]]></title><description><![CDATA[<p>Benutz anstatt <code>free</code> unbedingt die C++ Funktionen. In <strong>diesem Fall</strong> delete[]</p>
<p>Das Vermischen von C/C++ kann bei Speicherreservierung und Speicherfreigabe sonst große Probleme hervorrufen.</p>
<p>Übrigens gibt es für C++ Code ein eigenes Tag. Dort werden dann sogar die Keywords hervorgehoben.<br />
Hier nochmal der von dir gepostete Code, mit den richtigen Code-Tags:</p>
<pre><code class="language-cpp">#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

int main()
{
    ifstream ifsFile;
    long lngFileLength;
    char * pchrBuffer;

// open file
    cout &lt;&lt; &quot;INFO\tOpen file&quot; &lt;&lt; endl;
    ifsFile.open (&quot;C:\\tmp\\Test.txt&quot;, ios::binary);
    if (!ifsFile.is_open())
    {
        // error: File not found
        cout &lt;&lt; &quot;ERROR\tFile not found!&quot; &lt;&lt; endl;
        return 1;
    }

// get the length of file
    ifsFile.seekg (0, ios::end);
    lngFileLength = ifsFile.tellg();
    ifsFile.seekg (0, ios::beg);
    cout &lt;&lt; &quot;INFO\tFile length:\t&quot; &lt;&lt; lngFileLength &lt;&lt; endl;

// read file
    cout &lt;&lt; &quot;INFO\tRead file&quot; &lt;&lt; endl;
    pchrBuffer = new char[lngFileLength];
    ifsFile.read(pchrBuffer, lngFileLength);

// close file
    cout &lt;&lt; &quot;INFO\tClose file&quot; &lt;&lt; endl;
    ifsFile.close();

// show file content
    cout &lt;&lt; &quot;INFO\tFile content:&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;--------------------------------------------------------------&quot; &lt;&lt; endl;
    cout &lt;&lt; string (pchrBuffer, lngFileLength) &lt;&lt; endl;
    cout &lt;&lt; &quot;--------------------------------------------------------------&quot; &lt;&lt; endl;

// terminate buffer
    free (pchrBuffer);

// exit program
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1756661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756661</guid><dc:creator><![CDATA[BBBB]]></dc:creator><pubDate>Thu, 06 Aug 2009 23:44:30 GMT</pubDate></item><item><title><![CDATA[Reply to fread gibt mehr zurück als in der Datei drin ist. on Fri, 07 Aug 2009 06:11:09 GMT]]></title><description><![CDATA[<p>Anstelle des <em>new char[..]</em> würde ich ein <em>std::vector&lt;char&gt;</em> vorziehen.<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756685</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Fri, 07 Aug 2009 06:11:09 GMT</pubDate></item><item><title><![CDATA[Reply to fread gibt mehr zurück als in der Datei drin ist. on Fri, 07 Aug 2009 17:11:23 GMT]]></title><description><![CDATA[<p>Wenn du die Dateien nicht im Binärmodus aufmachst (&quot;rb&quot;), machst du sie im Textmodus auf (&quot;r&quot;). Unter Windows macht das nen Unterschied.<br />
Und wenn du sie im Textmodus aufmachst, dann kann es sein, dass fread WENIGER liefert, als Bytes in der Datei drinstehen (weil CR-LF zu nur LF umgewandelt wird).</p>
<p>Da du in deinem Programm (im ersten Beitrag) nur auf gleichheit testest, vermute ich dass du genau diesen Phänomen beobachtet hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1757043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1757043</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 07 Aug 2009 17:11:23 GMT</pubDate></item><item><title><![CDATA[Reply to fread gibt mehr zurück als in der Datei drin ist. on Fri, 07 Aug 2009 19:13:48 GMT]]></title><description><![CDATA[<p>@BBBB: delete[] Stimmt! Da war was! Hab's geändert. Danke.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a>: Ich gebe mir doch die Größe aus. In meiner Test.txt steht folgendes drin:</p>
<pre><code>Zeile 1
Zeile 2

Zeile 4
</code></pre>
<p>Das sind mit CR-LF 27 Bytes. Das ist im HEX-Editor auch zu sehen.</p>
<p>Offne ich die Datei mit &quot;rb&quot;. Steht nach fread folgendes im chrBuffer:<br />
&quot;Zeile 1CRLFZeile 2CRLFCRLRZeile 4ýýýý««««««««þ&quot;<br />
(CRLF steht nicht wirklich drin. Ich habe hier nur die Zeichen benannt)</p>
<p>Ich glaube, der Hund ist schon bei &quot;malloc&quot; begraben, denn er macht den Buffer nicht, wie ich erwartete 27 Bytes groß, sonder 40 Bytes groß: &quot;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍýýýý««««««««þ&quot; Das Gleiche macht auch &quot;new char[lngFileLength]&quot;.<br />
Nur verstehe ich nicht warum. Kann mir da jemand Nachhilfe geben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1757080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1757080</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Fri, 07 Aug 2009 19:13:48 GMT</pubDate></item><item><title><![CDATA[Reply to fread gibt mehr zurück als in der Datei drin ist. on Fri, 07 Aug 2009 19:59:34 GMT]]></title><description><![CDATA[<p>Wenn Du 27 Bytes anfordest, nimm die 27 Bytes die Du kriegst und gib sie anständig wieder zurück.</p>
<p>Was die Runtime noch für Debugging Patterns und andere Infos hinten dran schreibt ist ihre Sache.</p>
<p>Simon</p>
<p><strong>Edit</strong><br />
Ich vermute ausserdem stark, dass Du Aufgrund der Tatsache, dass Du im Debugger &quot;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍýýýý««««««««þ&quot; siehst, annimmst, dass eben 40 Bytes (o.ä.) reserviert wurden. In der Tat siehst Du aber einfach das was Dir der Debugger anzeigt und das ist bei einem char* einfach der Inhalt vom Pointer bis zum ersten '\0'. Und das was Du siehst ist der nicht- initialisierte Speicherinhalt, der ev. mit einem Debug Pattern belegt wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1757107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1757107</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Fri, 07 Aug 2009 19:59:34 GMT</pubDate></item><item><title><![CDATA[Reply to fread gibt mehr zurück als in der Datei drin ist. on Fri, 07 Aug 2009 21:32:40 GMT]]></title><description><![CDATA[<p>@Johnson:<br />
Du musst schon ein null-byte anhängen, wenn du den Zeiger auf den Puffer als C-String verwenden willst. C-Strings sind halt nullterminiert.<br />
Die Funktionen können ja nicht wissen wie lange der String sein soll...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1757150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1757150</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 07 Aug 2009 21:32:40 GMT</pubDate></item></channel></rss>