<?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[Dateieinlesen: Er liest zu viel ein]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich will eine XML Datei in einen char* einlesen und mache das so:</p>
<pre><code class="language-cpp">ifstream file(filename);

file.seekg(0, ios::end);  
unsigned int fileSize = static_cast&lt;unsigned int&gt;(file.tellg());
char* fileStr = new char[fileSize + 1];

file.seekg(0, std::ios::beg);
file.read(fileStr, fileSize);
file.close();

fileStr[fileSize] = 0;
</code></pre>
<p>Das Problem ist nur, das irgendwas nicht stimmt. fileSize ist 839 und das scheint zu viel zu sein.<br />
Die XML Datei endet mit &quot;&lt;/Map&gt;&quot; aber in dem string fileStr kommen noch ca. 30 Zeichen nach dem &lt;/Map&gt;!<br />
Sprich, das Ende von fileStr sieht so aus:</p>
<blockquote>
<p>[805] 77 'M'<br />
[806] 97 'a'<br />
[807] 112 'p'<br />
[808] 62 '&gt;'<br />
[809] -51 'Í' // hier sollte eigentlich die 0 stehen<br />
[810] -51 'Í'<br />
[811] -51 'Í'<br />
[812] -51 'Í'<br />
...<br />
[838] -51 'Í'<br />
[839] 0</p>
</blockquote>
<p>Meine Datei endet wirklich nach &lt;/Map&gt;<br />
Weiß jemand wieso nach meinem &lt;/Map&gt; noch die ganzen ASCII Zeichen mit Integerwert -51 kommen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/292132/dateieinlesen-er-liest-zu-viel-ein</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 06:39:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292132.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 03 Sep 2011 15:30:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dateieinlesen: Er liest zu viel ein on Sat, 03 Sep 2011 15:30:23 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich will eine XML Datei in einen char* einlesen und mache das so:</p>
<pre><code class="language-cpp">ifstream file(filename);

file.seekg(0, ios::end);  
unsigned int fileSize = static_cast&lt;unsigned int&gt;(file.tellg());
char* fileStr = new char[fileSize + 1];

file.seekg(0, std::ios::beg);
file.read(fileStr, fileSize);
file.close();

fileStr[fileSize] = 0;
</code></pre>
<p>Das Problem ist nur, das irgendwas nicht stimmt. fileSize ist 839 und das scheint zu viel zu sein.<br />
Die XML Datei endet mit &quot;&lt;/Map&gt;&quot; aber in dem string fileStr kommen noch ca. 30 Zeichen nach dem &lt;/Map&gt;!<br />
Sprich, das Ende von fileStr sieht so aus:</p>
<blockquote>
<p>[805] 77 'M'<br />
[806] 97 'a'<br />
[807] 112 'p'<br />
[808] 62 '&gt;'<br />
[809] -51 'Í' // hier sollte eigentlich die 0 stehen<br />
[810] -51 'Í'<br />
[811] -51 'Í'<br />
[812] -51 'Í'<br />
...<br />
[838] -51 'Í'<br />
[839] 0</p>
</blockquote>
<p>Meine Datei endet wirklich nach &lt;/Map&gt;<br />
Weiß jemand wieso nach meinem &lt;/Map&gt; noch die ganzen ASCII Zeichen mit Integerwert -51 kommen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2114369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2114369</guid><dc:creator><![CDATA[xmlEinleser]]></dc:creator><pubDate>Sat, 03 Sep 2011 15:30:23 GMT</pubDate></item><item><title><![CDATA[Reply to Dateieinlesen: Er liest zu viel ein on Sat, 03 Sep 2011 15:49:27 GMT]]></title><description><![CDATA[<p>Ändere das Öffnen der Datei mal:</p>
<pre><code class="language-cpp">ifstream file(filename, std::ios::binary);
</code></pre>
<p>In deiner XML-Datei wird wohl &quot;\r\n&quot; (zwei Bytes) als Zeilentrenner genutzt sein, die zwei Bytes pro Zeilenumbruch sind natürlich auch in FileSize mit drin. Das <code>file.read</code> liest afaik formatiert ein, d.h. es wandelt die Zeilenumbrüche in &quot;\n&quot; (ein Byte) um, womit das alles kürzer wird. Im Rest steht halt zufällig -51 drin.</p>
<p>Alternativ (eventuelle Fehler vorbehalten):</p>
<pre><code class="language-cpp">#include &lt;iterator&gt;
...

ifstream file(filename);
std::string fileStr( std::istream_iterator&lt;char&gt;(file), std::istream_iterator&lt;char&gt;() );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2114387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2114387</guid><dc:creator><![CDATA[fdfdg]]></dc:creator><pubDate>Sat, 03 Sep 2011 15:49:27 GMT</pubDate></item><item><title><![CDATA[Reply to Dateieinlesen: Er liest zu viel ein on Sat, 03 Sep 2011 16:03:12 GMT]]></title><description><![CDATA[<p>Aber wenn ich die Datei binär öffne, sollte er doch auch \r\n mitzählen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2114394</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2114394</guid><dc:creator><![CDATA[xmlEinleser]]></dc:creator><pubDate>Sat, 03 Sep 2011 16:03:12 GMT</pubDate></item><item><title><![CDATA[Reply to Dateieinlesen: Er liest zu viel ein on Sat, 03 Sep 2011 16:05:22 GMT]]></title><description><![CDATA[<p>Ok habs gerade getestet: In beiden Fällen (mit ios::binary und ohne) ist fileSize 1007. Aber wenn ich ios::binary angebe, dann wird im char array fileStr sofort nach &lt;/Map&gt; mit 0 terminiert. Hä?? Wie kann das sein? Is doch beide Male 1007?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2114396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2114396</guid><dc:creator><![CDATA[xmlEinleser]]></dc:creator><pubDate>Sat, 03 Sep 2011 16:05:22 GMT</pubDate></item><item><title><![CDATA[Reply to Dateieinlesen: Er liest zu viel ein on Sat, 03 Sep 2011 16:09:03 GMT]]></title><description><![CDATA[<p>Guck mal auf die Position des 0 Zeichens und die Position des &lt;/Map&gt; in den beiden verschiedenen Modi. Dann dürfte dir ein Licht aufgehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2114398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2114398</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 03 Sep 2011 16:09:03 GMT</pubDate></item></channel></rss>