<?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[string speichern]]></title><description><![CDATA[<p>Wie kann ich Strings als Binäre dateien speichern und wieder auslesen?<br />
bzw. sollte man Strings als Binäre oder ASCII dateien speichern? (Sie müssen nicht über den Editor etc lesbar sein)</p>
<p>Ich lerne gerade C++ jedoch ist dieses Thema völlig unzureichend erklärt, auf die Weise die dort beschrieben ist bekomm ich nichts als Fehlermeldung, egal welche variaten ich ausprobiere.</p>
<p>-brot</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/199589/string-speichern</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 19:18:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/199589.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 04 Dec 2007 20:46:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to string speichern on Tue, 04 Dec 2007 20:46:43 GMT]]></title><description><![CDATA[<p>Wie kann ich Strings als Binäre dateien speichern und wieder auslesen?<br />
bzw. sollte man Strings als Binäre oder ASCII dateien speichern? (Sie müssen nicht über den Editor etc lesbar sein)</p>
<p>Ich lerne gerade C++ jedoch ist dieses Thema völlig unzureichend erklärt, auf die Weise die dort beschrieben ist bekomm ich nichts als Fehlermeldung, egal welche variaten ich ausprobiere.</p>
<p>-brot</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415033</guid><dc:creator><![CDATA[brot-knusprig]]></dc:creator><pubDate>Tue, 04 Dec 2007 20:46:43 GMT</pubDate></item><item><title><![CDATA[Reply to string speichern on Tue, 04 Dec 2007 21:00:43 GMT]]></title><description><![CDATA[<p>Einfacher ist es den Stream nicht binary zu schreiben ... sonnst musst du dir die Größe mitspeichern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415043</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Tue, 04 Dec 2007 21:00:43 GMT</pubDate></item><item><title><![CDATA[Reply to string speichern on Tue, 04 Dec 2007 21:47:13 GMT]]></title><description><![CDATA[<p>ok danke, ich bin jetzt schonmal um einiges weitergekommen</p>
<p>in einer schleife ist jetzt folgendes drinnen:</p>
<pre><code class="language-cpp">ofstream datei1, datei2;
			remove(Zieldateiname1.c_str());
			remove(Zieldateiname2.c_str());
			datei1.open(Zieldateiname1.c_str(), ios::binary|ios::out), 
			datei2.open(Zieldateiname2.c_str(), ios::binary|ios::out);
			if(!datei2 &amp;&amp; !datei1) {
				system(&quot;CLS&quot;);
				system(&quot;COLOR 0C&quot;);
				cerr &lt;&lt; &quot;Error: Saving attempt failed! (17243)\n\n\n\a\a\a&quot;;
				system(&quot;PAUSE&quot;);
				exit(-1);
			}
			string enter2 = ((Nenner + &quot;;&quot;) + Schritt);
			datei1.write(reinterpret_cast&lt;const char*&gt;(&amp;HauptZahl), sizeof(datei1));
			datei2.write(reinterpret_cast&lt;const char*&gt;(&amp;enter2), sizeof(datei2));
</code></pre>
<p>es sollen also die dateien alle X mal neu gespeichert werden...<br />
es funktioniert aber nur ohne schleife, mit schleife werden beim laden der dateien falsche daten angezeigt....<br />
warum?!?</p>
<p>(und brauche ich remove bevor ich die datei neu erstelle??)</p>
<p>-brot</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415065</guid><dc:creator><![CDATA[brot-knusprig]]></dc:creator><pubDate>Tue, 04 Dec 2007 21:47:13 GMT</pubDate></item><item><title><![CDATA[Reply to string speichern on Tue, 04 Dec 2007 22:51:36 GMT]]></title><description><![CDATA[<p>Deine write-Funktionen sind falsch. Hier mal ein Beispiel wie es aussehen sollte.</p>
<pre><code class="language-cpp">size_t str_size = enter2.size();
datei2.write(reinterpret_cast&lt;const char*&gt;(&amp;str_size), sizeof(str_size)); //Stringlänge brauchst du nachher für das Einlesen
datei2.write(enter2.c_str(), str_size);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1415088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415088</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 04 Dec 2007 22:51:36 GMT</pubDate></item><item><title><![CDATA[Reply to string speichern on Wed, 05 Dec 2007 06:24:47 GMT]]></title><description><![CDATA[<p>ich müsste also eine von beiden varianten wählen?<br />
wie funktioniert dann das auslesen?</p>
<pre><code class="language-cpp">quelle2.read(reinterpret_cast&lt;char*&gt;(&amp;out3), sizeof(out3));
</code></pre>
<p>so?</p>
<p>-brot</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415108</guid><dc:creator><![CDATA[brot-knusprig]]></dc:creator><pubDate>Wed, 05 Dec 2007 06:24:47 GMT</pubDate></item><item><title><![CDATA[Reply to string speichern on Wed, 05 Dec 2007 06:56:39 GMT]]></title><description><![CDATA[<p>brot-knusprig schrieb:</p>
<blockquote>
<p>ich müsste also eine von beiden varianten wählen?</p>
</blockquote>
<p>Varianten? Du mußt sowohl die Größe als auch den Inhalt speichern, damit du später wieder an deine Daten herankommst.</p>
<blockquote>
<p>wie funktioniert dann das auslesen?</p>
</blockquote>
<p>Analog dazu - erst die Größe auslesen und dann den String-Inhalt:</p>
<pre><code class="language-cpp">size_t str_size;
quelle2.read(reinterpret_cast&lt;char*&gt;(&amp;str_size),sizeof(str_size));
out3.resize(str_size);
quelle2.read(&amp;out3[0],str_size);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1415109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415109</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 05 Dec 2007 06:56:39 GMT</pubDate></item><item><title><![CDATA[Reply to string speichern on Wed, 05 Dec 2007 07:10:58 GMT]]></title><description><![CDATA[<p>Vorsicht, string macht nicht dieselben Zusicherungen was die Kontinuität der Daten angeht wie vector!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415114</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 05 Dec 2007 07:10:58 GMT</pubDate></item><item><title><![CDATA[Reply to string speichern on Wed, 05 Dec 2007 07:14:35 GMT]]></title><description><![CDATA[<p>Punkt für dich - dann bleibt wohl als sichere Möglichkeit nur, einen Zwischenspeicher zu verwenden:</p>
<pre><code class="language-cpp">size_t str_size;
quelle2.read(reinterpret_cast&lt;char*&gt;(&amp;str_size),sizeof(str_size));
char* str_data = new char[str_size];
quelle2.read(str_data,str_size);
out3.assign(str_data,str_size);
delete[] str_data;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1415116</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415116</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 05 Dec 2007 07:14:35 GMT</pubDate></item><item><title><![CDATA[Reply to string speichern on Wed, 05 Dec 2007 13:19:07 GMT]]></title><description><![CDATA[<p>Das einlesen funktioniert jetzt... jedoch ist beim Speichern ein Problem aufgetreten:</p>
<blockquote>
<p>1311335885683452545606724671234717114812066337360530535517850322123143438073451583919041137664075741408695380032997797693941515774560206746511801745944803272028082373781327597985875600530292778666649126180654062559672830333592535040000000000000000000000000000000000000;153  % } 2608734050659351532486483762591710908434176966764630657836323658471784724335337662313921225280404341471670442588095565182183140823302944372059039812523293461467814839629905920000000000000000000000000000   P `z3 9148103077779509614041854454197503032072210481948923307047310834996215483596048658185172</p>
</blockquote>
<p>Allerdings sollten normalerweise nur zwei Zahlen also z.B.</p>
<blockquote>
<p>12;13</p>
</blockquote>
<p>vorhanden sein und nicht allerlei unnötige zeichen (wie '}' '%' 'P')</p>
<p><strong>(betrifft enter2)</strong></p>
<pre><code class="language-cpp">remove(Zieldateiname1.c_str());
			remove(Zieldateiname2.c_str());
			datei1.open(Zieldateiname1.c_str(), ios::binary|ios::out), 
			datei2.open(Zieldateiname2.c_str(), ios::binary|ios::out);
			if(!datei2 &amp;&amp; !datei1) {
				system(&quot;CLS&quot;);
				system(&quot;COLOR 0C&quot;);
				cerr &lt;&lt; &quot;Error: Saving attempt failed! (17243)\n\n\n\a\a\a&quot;;
				system(&quot;PAUSE&quot;);
				exit(-1);
			}
			string enter2 = ((Nenner + &quot;;&quot;) + Schritt);
			size_t str_size = HauptZahl.size();
			datei1.write(reinterpret_cast&lt;const char*&gt;(&amp;str_size), sizeof(str_size));
			datei1.write(HauptZahl.c_str(), str_size);
			str_size = enter2.size();
			datei2.write(reinterpret_cast&lt;const char*&gt;(&amp;str_size), sizeof(str_size));
			datei2.write(enter2.c_str(), str_size);
			datei1.close();
			datei2.close();
			datei1.clear();
			datei2.clear();
</code></pre>
<p>-brot</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415269</guid><dc:creator><![CDATA[brot-knusprig]]></dc:creator><pubDate>Wed, 05 Dec 2007 13:19:07 GMT</pubDate></item><item><title><![CDATA[Reply to string speichern on Wed, 05 Dec 2007 13:31:22 GMT]]></title><description><![CDATA[<p>Du speicherst doch binär. Logischerweise sind da <em>komische</em> Zeichen. Schau dir die Datei besser mal in einem Hexeditor an. Wenn du einlesen kannst ist alles ok.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415280</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 05 Dec 2007 13:31:22 GMT</pubDate></item><item><title><![CDATA[Reply to string speichern on Wed, 05 Dec 2007 13:42:28 GMT]]></title><description><![CDATA[<p>ich hab mir alle strings nach dem einlesen ausgeben lassen - und da sind die zeichen auch...</p>
<blockquote>
<p>OUT3: 13113358856834525456067246712347171148120663373605305355178503221231434380<br />
73451583919041137664075741408695380032997797693941515774560206746511801745944803<br />
27202808237378132759798587560053029277866664912618065406255967283033359253504000<br />
0000000000000000000000000000000000;153  % } 2608734050659351<br />
53248648376259171090843417696676463065783632365847178472433533766231392122528040<br />
43414716704425880955651821831408233029443720590398125232934614678148396299059200<br />
00000000000000000000000000   P `z3 914810307777950961404185445419750303207221<br />
0481948923307047310834996215483596048658185172</p>
</blockquote>
<p>das ist was mich verwundert...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415288</guid><dc:creator><![CDATA[brot-knusprig]]></dc:creator><pubDate>Wed, 05 Dec 2007 13:42:28 GMT</pubDate></item><item><title><![CDATA[Reply to string speichern on Wed, 05 Dec 2007 14:06:33 GMT]]></title><description><![CDATA[<p>Dann zeige mal deine Einleseroutine.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415300</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 05 Dec 2007 14:06:33 GMT</pubDate></item><item><title><![CDATA[Reply to string speichern on Wed, 05 Dec 2007 15:07:01 GMT]]></title><description><![CDATA[<p>Also ...<br />
1. std::remove brauchst du nicht. Setz einfach std::trunc als Öffnen-Parameter von std::ofstream.<br />
2. String schreiben:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
void write_string(std::basic_ostream&lt;T&gt;&amp; out, std::basic_string&lt;T&gt; const&amp; str)
{
    if (!out) throw std::invalid_argument(&quot;stream invalid&quot;);
    std::size_t str_len(str.legth() + 1);
    out.write(reinterpret_cast&lt;const T*&gt;(&amp;str_len), sizeof(std::size_t));
    out.write(str.c_str(), sizeof(T) * str_len);
}
</code></pre>
<p>3. String lesen:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
void read_string(std::basic_istream&lt;T&gt;&amp; out, std::basic_string&lt;T&gt;&amp; str)
{
    if (!out) throw std::invalid_argument(&quot;stream invalid&quot;);
    std::size_t str_len(0);
    out.read(reinterpret_cast&lt;char*&gt;(&amp;str_len), sizeof(std::size_t));
    T* arr_tmp(new T[str_len]);
    out.read(arr_tmp, str_len * sizeof(T));
    str = arr_tmp;
    delete [] arr_tmp;
}
</code></pre>
<p>...</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>: Stimmt! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415343</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 05 Dec 2007 15:07:01 GMT</pubDate></item><item><title><![CDATA[Reply to string speichern on Wed, 05 Dec 2007 15:06:03 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>3. String lesen:</p>
</blockquote>
<p>Ich würde da ja eher einen basic_istream&lt;T&gt; verwenden, aber das ist deine Entscheidung <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/1415344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415344</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 05 Dec 2007 15:06:03 GMT</pubDate></item><item><title><![CDATA[Reply to string speichern on Wed, 05 Dec 2007 15:17:01 GMT]]></title><description><![CDATA[<p>ok, es funktioniert mittlerweile alles</p>
<p><strong>danke für eure hilfe</strong></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415354</guid><dc:creator><![CDATA[brot-knusprig]]></dc:creator><pubDate>Wed, 05 Dec 2007 15:17:01 GMT</pubDate></item></channel></rss>