<?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[Probleme mit Dateieinlesen über ifstream]]></title><description><![CDATA[<p>Hallo zusammen, ich habe hier bei meinem aktuellen Projekt einige Probleme, mit denen ich einfach nicht klar komme, obwohl der code unglaublich einfach ist, und eigentlich nix schief gehen sollte.</p>
<p>Vereinfacht gesagt will ich Daten aus einer Datei auslesen, hab das probeweise mal mit einer einfachen txt nachgestellt die folgenden Inhalt halt:</p>
<blockquote>
<p>abc<br />
defghijkl<br />
mnopqrstuvw<br />
xyz</p>
</blockquote>
<p>Nun versuche ich die Datei mit folgenden Code auszulesen und den Inhalt in ein char Array zu speichern, damit ich damit später arbeiten kann, das ganze sieht dann so aus:</p>
<pre><code>ifstream f(&quot;.../bla.txt&quot;);

    f.seekg(0,ios::end);

    size_t t= f.tellg();  // 32

    char array[t];

    f.seekg(0,ios::beg);

    f.read(array,t);

    cout &lt;&lt; &quot;Inhalt: &quot; &lt;&lt; array &lt;&lt; endl;
</code></pre>
<p>Nun wird aber am Ende bei der Ausgabe nicht einfach der Text ausgegeben wie er ind er Textdatei steht, sondern am Ende werden noch zwei Hyroglyphen angefügt. Wenn ich die Zeile</p>
<pre><code>char array[t];
</code></pre>
<p>durch</p>
<pre><code>char *array = new char[t];
</code></pre>
<p>ersetze, bekomme ich sogar noch mehr Hyroglyphen am Ende.</p>
<p>Das Schlimme ist, bei meinem eigentlich Projekt (das hier war nur mal ein Beispielcode der den selben Fehler in abgeschwächter Form erzeugt), hat dieser Fehler noch viel schlimmerer Auswirkungen, und die Daten im Array scheinen gegen Ende völlig durcheinander zu geraten.</p>
<p>Übrigens, wenn iech hdas Sctriingende Zeichen '\0' manuell an die vorvorletzte position im Array setze, wird alles wie gewünscht ausgegeben, nur ist das Problem eben dass mir tellg() ja eigentlich ne andere Position für das Stingende angibt, und ich mich so eigentlich darauf verlassen muss.</p>
<p>Vielleicht weiß ja jemand von euch wie ich damit zurechtkommen kann.</p>
<p>Vielen Dank schon mal</p>
<p>Mfg Felsen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/233579/probleme-mit-dateieinlesen-über-ifstream</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 20:24:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/233579.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 06 Feb 2009 04:25:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit Dateieinlesen über ifstream on Fri, 06 Feb 2009 04:30:24 GMT]]></title><description><![CDATA[<p>Hallo zusammen, ich habe hier bei meinem aktuellen Projekt einige Probleme, mit denen ich einfach nicht klar komme, obwohl der code unglaublich einfach ist, und eigentlich nix schief gehen sollte.</p>
<p>Vereinfacht gesagt will ich Daten aus einer Datei auslesen, hab das probeweise mal mit einer einfachen txt nachgestellt die folgenden Inhalt halt:</p>
<blockquote>
<p>abc<br />
defghijkl<br />
mnopqrstuvw<br />
xyz</p>
</blockquote>
<p>Nun versuche ich die Datei mit folgenden Code auszulesen und den Inhalt in ein char Array zu speichern, damit ich damit später arbeiten kann, das ganze sieht dann so aus:</p>
<pre><code>ifstream f(&quot;.../bla.txt&quot;);

    f.seekg(0,ios::end);

    size_t t= f.tellg();  // 32

    char array[t];

    f.seekg(0,ios::beg);

    f.read(array,t);

    cout &lt;&lt; &quot;Inhalt: &quot; &lt;&lt; array &lt;&lt; endl;
</code></pre>
<p>Nun wird aber am Ende bei der Ausgabe nicht einfach der Text ausgegeben wie er ind er Textdatei steht, sondern am Ende werden noch zwei Hyroglyphen angefügt. Wenn ich die Zeile</p>
<pre><code>char array[t];
</code></pre>
<p>durch</p>
<pre><code>char *array = new char[t];
</code></pre>
<p>ersetze, bekomme ich sogar noch mehr Hyroglyphen am Ende.</p>
<p>Das Schlimme ist, bei meinem eigentlich Projekt (das hier war nur mal ein Beispielcode der den selben Fehler in abgeschwächter Form erzeugt), hat dieser Fehler noch viel schlimmerer Auswirkungen, und die Daten im Array scheinen gegen Ende völlig durcheinander zu geraten.</p>
<p>Übrigens, wenn iech hdas Sctriingende Zeichen '\0' manuell an die vorvorletzte position im Array setze, wird alles wie gewünscht ausgegeben, nur ist das Problem eben dass mir tellg() ja eigentlich ne andere Position für das Stingende angibt, und ich mich so eigentlich darauf verlassen muss.</p>
<p>Vielleicht weiß ja jemand von euch wie ich damit zurechtkommen kann.</p>
<p>Vielen Dank schon mal</p>
<p>Mfg Felsen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1658837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1658837</guid><dc:creator><![CDATA[Felsen]]></dc:creator><pubDate>Fri, 06 Feb 2009 04:30:24 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Dateieinlesen über ifstream on Fri, 06 Feb 2009 05:11:07 GMT]]></title><description><![CDATA[<p>Vorab:<br />
Initialisier das Array mal mit Nullen.</p>
<pre><code>char array[t] = {0};
</code></pre>
<p>Zum Problem:<br />
Ich denke es liegt an dem EOF Zeichen, dass du mit einliest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1658840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1658840</guid><dc:creator><![CDATA[feraL]]></dc:creator><pubDate>Fri, 06 Feb 2009 05:11:07 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Dateieinlesen über ifstream on Fri, 06 Feb 2009 06:34:54 GMT]]></title><description><![CDATA[<p>feraL schrieb:</p>
<blockquote>
<p>Vorab:<br />
Initialisier das Array mal mit Nullen.</p>
<pre><code>char array[t] = {0};
</code></pre>
<p>Zum Problem:<br />
Ich denke es liegt an dem EOF Zeichen, dass du mit einliest.</p>
</blockquote>
<p>Naja nicht gerade die Beste Lösung.<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19942">@Felsen</a> Du bist in einem C++ Forum und benutzt auch C++ Mittel, warum führst du das nicht weiter, und lässt die Finger von char zeigern und char-arrays? Nimm doch einfach <a href="http://www.cplusplus.com/reference/string/string/string.html" rel="nofollow">std::string</a> zum einlesen und zum temporären speichern nimmst du <a href="http://www.cplusplus.com/reference/stl/vector/" rel="nofollow">std::vector<a href="std::string" rel="nofollow">std::string</a></a><br />
und zum lesen der Datei nicht unbedingt seekg und read nehmen wenn du nicht gezwungen bist es binär einzulesen. Sondern dafür einfach den Stream nehmen oder <code>getline</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1658856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1658856</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Fri, 06 Feb 2009 06:34:54 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Dateieinlesen über ifstream on Fri, 06 Feb 2009 12:24:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">ifstream f(&quot;bla.txt&quot;); 

    f.seekg(0,ios::end); 

    size_t t = f.tellg()+1;     // ! 

	// char array[t]; Fehler! t ist keine Konstante
    char* array = new char[t]();  // Die runden Klammern bewirken,
	                              // das das Array mit Nullen initialisiert wird.
								  // Da Du nur eine abschliessende 0 brauchst,kannst
	                              // Du auch char* array = new char[t]; array[t-1] = 0;  schreiben.

    f.seekg(0,ios::beg); 

    f.read(array,t-1); // !

    cout &lt;&lt; &quot;Inhalt: &quot; &lt;&lt; array &lt;&lt; endl;
</code></pre>
<p><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/1659015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1659015</guid><dc:creator><![CDATA[emmax]]></dc:creator><pubDate>Fri, 06 Feb 2009 12:24:33 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Dateieinlesen über ifstream on Fri, 06 Feb 2009 13:00:31 GMT]]></title><description><![CDATA[<p>Hi erst mal Danke für die schnelle Hilfe <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><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19094">@feraL</a></p>
<p>Dein Code funktioniert leider nicht, weil t zum dem Zeitpunkt noch nicht feststeht, und somit auch nichts mit 0 initialisiert werden kann. So sagts zumindest der Compiler und logisch is es ja auch.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15364">@Firefighter</a></p>
<p>Da hast du schon recht, hab in der Zwischenzeit eine alternativ Version mit vector und string geschrieben die auch funktioniert. Habe nur ein paar Bedenken weil da ja doch schon ziehmlich viel Rechenaufwand betrieben wird, und ich die Laufzeit nicht unnötig nach oben treiben will. Schließlich ist das konvertieren einer Zeichenkette in einen String, den String in den Vector packen, bei Bedarf dann noch neuen Vector Speicherplatz reservieren etc. doch zeitaufwändiger, als einfach mit meinem char Zeiger durch das Array zu flitzen.<br />
Aber so hab ich jetzt jedenfalls auch noch nen Plan B in der Tasche, und in dem Punkt hast du recht, eleganter siehts so wirklich aus.</p>
<p>@emmax</p>
<p>WOW! Ich verstehe zwar nicht genau wieso das jetzt funktioniert, denn du machst das Array ja nur um eins größer als tellg() sagt, und dann eben noch entsprechend der Kniff bei read. Aber letzten Endes funktionierts genau so wie ich mir das vorgestellt habe, und das ist die Hauptsache. <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>Also vielen Dank euch allen</p>
<p>Mfg Felsen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1659048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1659048</guid><dc:creator><![CDATA[Felsen]]></dc:creator><pubDate>Fri, 06 Feb 2009 13:00:31 GMT</pubDate></item></channel></rss>