<?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[inhalt eines struct  speichern]]></title><description><![CDATA[<p>Jo hi,</p>
<p>wie der titel schon ahnen lässt, möchte ich eine struktur in eine datei speichern und wieder auslesen,..<br />
mein problem ist das <strong>fwrite</strong> nur einen pointer akzeptiert,..<br />
mein struct ist aber kein pointer,..</p>
<p>meinen source habe ich leider gerade nicht hier aber heißt das ich eine typenkonvertierung á la:</p>
<pre><code class="language-cpp">char *buffer=&amp;mein_struct;
</code></pre>
<p>machen muss?</p>
<p>(fragen koscht jo nüx)</p>
<p>seid gegrüßt;</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/202794/inhalt-eines-struct-speichern</link><generator>RSS for Node</generator><lastBuildDate>Wed, 07 Oct 2026 04:17:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/202794.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 15 Jan 2008 15:03:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to inhalt eines struct  speichern on Tue, 15 Jan 2008 15:03:39 GMT]]></title><description><![CDATA[<p>Jo hi,</p>
<p>wie der titel schon ahnen lässt, möchte ich eine struktur in eine datei speichern und wieder auslesen,..<br />
mein problem ist das <strong>fwrite</strong> nur einen pointer akzeptiert,..<br />
mein struct ist aber kein pointer,..</p>
<p>meinen source habe ich leider gerade nicht hier aber heißt das ich eine typenkonvertierung á la:</p>
<pre><code class="language-cpp">char *buffer=&amp;mein_struct;
</code></pre>
<p>machen muss?</p>
<p>(fragen koscht jo nüx)</p>
<p>seid gegrüßt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1437118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1437118</guid><dc:creator><![CDATA[zeusosc]]></dc:creator><pubDate>Tue, 15 Jan 2008 15:03:39 GMT</pubDate></item><item><title><![CDATA[Reply to inhalt eines struct  speichern on Tue, 15 Jan 2008 15:06:09 GMT]]></title><description><![CDATA[<p>Dein struct ist kein Pointer - aber du kannst ja die Adresse des structs nehmen (und die ist ein Pointer):</p>
<pre><code class="language-cpp">fwrite(&amp;mein_struct,sizeof(mein_struct),1,datei);
</code></pre>
<p>PS: Wir sind hier im C++ Forum, also empfehle ich mal std::fstreams anstelle des fwrite().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1437121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1437121</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 15 Jan 2008 15:06:09 GMT</pubDate></item><item><title><![CDATA[Reply to inhalt eines struct  speichern on Tue, 15 Jan 2008 15:09:46 GMT]]></title><description><![CDATA[<p>Genau das habe ich gemacht,..<br />
resultat=&gt;der inhalt der datei ist 0byte groß.<br />
da das speichern und das lesen inerhalb einens programm ablaufes aber kein problem ist, schätze ich (achtung vermutung) das der höchstens die adresse aber nicht den inhalt speichert, daher die frage zur konvertierung,...<br />
ja über fstream habe ich auch schon nachgedacht,..</p>
<p>grüüße;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1437123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1437123</guid><dc:creator><![CDATA[zeusosc]]></dc:creator><pubDate>Tue, 15 Jan 2008 15:09:46 GMT</pubDate></item><item><title><![CDATA[Reply to inhalt eines struct  speichern on Tue, 15 Jan 2008 15:17:54 GMT]]></title><description><![CDATA[<p>Außerdem würde ich Dir raten, es NICHT so zu machen.</p>
<p>Das ist zwar jetzt erst einmal bequem (und funktioniert wahrscheinlich auch erstmal), da aber nicht festgelegt ist, wie ein Compiler ein struct im Speicher (und damit dann auch in Deiner Datei) ablegt, erhältst Du ein hochgradig plattform- und Compiler-spezifisches Format.<br />
... mit der hohen Chance, dass Du es später (andere Compilerversion oder -parameter; anderes Betriebssystem, ...) nicht mehr lesen kannst und wenig Chancen hast, es zu &quot;reparieren&quot;.</p>
<p>Außerdem wirst Du nur wenig von dem Zeug &quot;per Auge debuggen&quot; können. WENN also mal was nicht so funktioniert, stehst Du vor ziemlicher fieser Arbeit.</p>
<p>Deswegen mein Standard-Vorschlag:<br />
- operator&lt;&lt;() und operator&gt;&gt;() überladen,<br />
- Elementweise lesbar ablegen und<br />
- ofstream, ifstream verwenden.</p>
<p>zeusosc schrieb:</p>
<blockquote>
<p>...schätze ich (achtung vermutung) das der höchstens die adresse aber nicht den inhalt speichert, ...</p>
</blockquote>
<p>Aber auch die Adresse hätte mehr als 0Byte. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Ich schätze eher, dass Du<br />
- gar nicht bis zum fwrite() gekommen bist oder<br />
- das fclose() vergessen hast oder<br />
während des Programmlaufes VOR erreichen des fclose() nachgesehen hast oder<br />
- das File nicht zum Binärzugriff geöffnet hast (Flag b).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1437128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1437128</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 15 Jan 2008 15:17:54 GMT</pubDate></item><item><title><![CDATA[Reply to inhalt eines struct  speichern on Tue, 15 Jan 2008 16:07:06 GMT]]></title><description><![CDATA[<blockquote>
<p>Aber auch die Adresse hätte mehr als 0Byte. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Ich schätze eher, dass Du<br />
- gar nicht bis zum fwrite() gekommen bist oder<br />
- das fclose() vergessen hast oder<br />
während des Programmlaufes VOR erreichen des fclose() nachgesehen hast oder<br />
- das File nicht zum Binärzugriff geöffnet hast (Flag b).</p>
</blockquote>
<p>ich habe extra noch eine seperate routine geschrieben, die nach dem speichern, die daten mit extra neuem öffnen der dateien lädt und vergleicht,.. und diese sagte mir das alles ok ist,...<br />
das compiler spezifisch die struct verwaltet werden ist *****, aber jetzt extra dafür ein daten writer/parser zu schribseln, gerade was die komplexität des structs betrifft, ist gegenüber dem eigendlichen programm evtl. zu aufwändig,...<br />
gibts alternativen?</p>
<p>grüüüße und dank;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1437156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1437156</guid><dc:creator><![CDATA[zeusosc]]></dc:creator><pubDate>Tue, 15 Jan 2008 16:07:06 GMT</pubDate></item><item><title><![CDATA[Reply to inhalt eines struct  speichern on Tue, 15 Jan 2008 16:11:13 GMT]]></title><description><![CDATA[<p>Ja, innerhalb des selben Programms sind die Daten noch kompatibel. Aber wenn du dein struct speicherst, das Programm mit anderen Einstellungen neu compilierst und dann die Daten einliest, kommt womöglich nur Müll heraus.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/734">@Simon</a>: Der Zugriffsmodus (binär/text) hat aber keinen Einfluß darauf, ob fwrite() erfolgreich ist <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/1437159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1437159</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 15 Jan 2008 16:11:13 GMT</pubDate></item><item><title><![CDATA[Reply to inhalt eines struct  speichern on Tue, 15 Jan 2008 16:24:53 GMT]]></title><description><![CDATA[<p>zeusosc schrieb:</p>
<blockquote>
<p>...<br />
ich habe extra noch eine seperate routine geschrieben, die nach dem speichern, die daten mit extra neuem öffnen der dateien lädt und vergleicht,..</p>
</blockquote>
<p>Sorry, aber das sichert Dich eigentlich höchstens gegen eine fehlerhafte Implementation von fwrite() ab und sonst gegen gar nichts.<br />
Mein Einwand bezog sich aber nicht darauf, sondern darauf, dass Du jetzt Files schreibst und sie<br />
- nicht mehr lesen kannst, wenn Du im Release-Modus compilierst oder<br />
- Deinem Kumpel schickst, der sie mit seinem Programm (das er z.B. mit anderen Compile-Parametern erstellt hat) nicht lesen kann.<br />
- Oder Du willst in 2 Jahren diese Daten nochmal lesen und inzwischen hast Du eine neue Compilerversion installiert.</p>
<p>Alternativen habe ich keine ... &quot;quick&amp;dirty&quot; ist eben nicht nur &quot;quick&quot;. <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="😉"
    /><br />
Letztlich ist die Aufgabe aber gar nicht so aufwendig (könnte man fast schon einen Generator für schreiben):</p>
<pre><code class="language-cpp">struct myStruct {
   TypA a;
   TypB b;
};

ostream&amp; operator&lt;&lt;(myStruct const&amp; s, ostream&amp; ost) {
   return ost &lt;&lt; a &lt;&lt; &quot; &quot; &lt;&lt; b &lt;&lt; &quot;\n&quot;;
}

istream&amp; operator&gt;&gt;(myStruct&amp; s, istream&amp; ist) {
   ist &gt;&gt; a;
   return ist &gt;&gt; b;
}
</code></pre>
<p>Damit kannst Du myStruct-Objekte über Konsole, File, Netz, ... (wofür immer Du einen ostream hast) ausgeben und einlesen.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1437166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1437166</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 15 Jan 2008 16:24:53 GMT</pubDate></item><item><title><![CDATA[Reply to inhalt eines struct  speichern on Tue, 15 Jan 2008 16:26:01 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>...<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/734">@Simon</a>: Der Zugriffsmodus (binär/text) hat aber keinen Einfluß darauf, ob fwrite() erfolgreich ist <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>Das behaupte ich auch nicht, aber kann es nicht trotzdem erfolgreich einen leeren String schreiben ? (z.B. weil das erste Byte des Structs 0 ist ? )</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1437168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1437168</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 15 Jan 2008 16:26:01 GMT</pubDate></item><item><title><![CDATA[Reply to inhalt eines struct  speichern on Tue, 15 Jan 2008 18:47:44 GMT]]></title><description><![CDATA[<p>hier erstmal der teil von der speichern routine,...</p>
<pre><code class="language-cpp">FILE * temp_file;
temp_file=fopen(temp_filename,&quot;wb&quot;); 
fwrite(&amp;tf_data,sizeof(tf_data), sizeof(tf_data), temp_file);
fclose(temp_file);
</code></pre>
<p>und hier ist der struct:</p>
<pre><code class="language-cpp">typedef struct {
        temp_file_info tfi;
        temp_file_decks tfd;
        temp_file_stack tfs;
}temp_file_data;

typedef struct {
       long int temp_file_count_loops;
       char temp_file_filename[80];
       long int temp_file_number_of_rounds;
       int temp_file_number_of_players;
       int temp_file_deck_index;
}temp_file_info;

typedef struct {
  cardtype temp_file_o_bigdeck[52];
  cardtype temp_file_o_smalldeck[32];
  cardtype temp_file_play_bdeck[52];
  cardtype temp_file_play_sdeck[32];
  cardtype temp_file_public_stack[5];     
}temp_file_decks;

typedef struct {
       stack_of_player temp_file_player[10];
       played_stack temp_file_stochasticle_stack[10];
       vector&lt;played_hand&gt; temp_file_stochasticle_hand_unsuited;
       vector&lt;played_hand&gt; temp_file_stochasticle_hand_suited;
}temp_file_stack;
</code></pre>
<p>und dass alles als iostream overloaden man man man,.. brauch ich wohl n bissl,..<br />
najagut,. danke jungs,..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1437235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1437235</guid><dc:creator><![CDATA[zeusosc]]></dc:creator><pubDate>Tue, 15 Jan 2008 18:47:44 GMT</pubDate></item><item><title><![CDATA[Reply to inhalt eines struct  speichern on Tue, 15 Jan 2008 19:44:28 GMT]]></title><description><![CDATA[<p>zeusosc schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">...
fwrite(&amp;tf_data,sizeof(tf_data), sizeof(tf_data), temp_file);
...
</code></pre>
<p>...</p>
</blockquote>
<p>Also das ist bestimmt nicht, was Du willst: Du hast vermutlich nicht &quot;sizeof(tf_data)&quot; viele Elemente (3. Parameter) in einem Array, oder ?<br />
Du meinst bestimmt eher:</p>
<pre><code class="language-cpp">fwrite(&amp;tf_data,sizeof(tf_data), 1, temp_file);
</code></pre>
<p>Siehe auch: <a href="http://www.cppreference.com/stdio/fwrite.html" rel="nofollow">http://www.cppreference.com/stdio/fwrite.html</a></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1437257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1437257</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 15 Jan 2008 19:44:28 GMT</pubDate></item><item><title><![CDATA[Reply to inhalt eines struct  speichern on Wed, 16 Jan 2008 06:45:47 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Das behaupte ich auch nicht, aber kann es nicht trotzdem erfolgreich einen leeren String schreiben ? (z.B. weil das erste Byte des Structs 0 ist ? )</p>
</blockquote>
<p>fwrite() schreibt keine Strings, sondern Datenblocks - und auch im Textmodus haben da Null-Bytes keine Sonderbedeutung (das einzige Zeichen, das afaik im Textmodus anders behandelt wird als im Binärmodus, ist das NewLine).</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4791">@zeus</a>: der Code sieht ja scheuslich aus - sowas kommt wohl heraus, wenn man C und C++ bunt durcheinanderwirft <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1437387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1437387</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 16 Jan 2008 06:45:47 GMT</pubDate></item><item><title><![CDATA[Reply to inhalt eines struct  speichern on Wed, 16 Jan 2008 08:03:08 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Das behaupte ich auch nicht, aber kann es nicht trotzdem erfolgreich einen leeren String schreiben ? (z.B. weil das erste Byte des Structs 0 ist ? )</p>
</blockquote>
<p>fwrite() schreibt keine Strings, sondern Datenblocks - und auch im Textmodus haben da Null-Bytes keine Sonderbedeutung (das einzige Zeichen, das afaik im Textmodus anders behandelt wird als im Binärmodus, ist das NewLine)....</p>
</blockquote>
<p>Aha !!</p>
<p>Ich kenne mich mit den Interna von fwrite() nicht aus und wusste das nicht, sondern bin davon ausgegangen, dass eine (vom Std erlaubte) fwrite-Implementierung für &quot;Text-FILEs&quot; auch 0-Terminierung berücksichtigen darf/kann/könnte/...</p>
<p>Wenn das aber so ist, ziehe ich mein Argument zurück (zumal im Code ja schon zu sehen ist, dass das 'b' angegeben ist) und behaupte das Gegenteil. <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>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1437405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1437405</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 16 Jan 2008 08:03:08 GMT</pubDate></item><item><title><![CDATA[Reply to inhalt eines struct  speichern on Wed, 16 Jan 2008 15:33:21 GMT]]></title><description><![CDATA[<p>Hi simon2,</p>
<p>der 3te parameter bestimmt doch die blockgröße die auf &quot;einmal&quot; geschrieben werden soll, da das doch ein stream ist, sollte dieser dann den ganzen struct auf einmal schreiben oder nicht?? gruß</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>:<br />
hm naja,.. mein sinn lag nicht an schönheit,.. sondern nur daran das effektiv das gemacht wird was ich vorhatte,.. immerhin bin ich hier doch im c/c++ forum <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ,.. naja mal ehrlich hätte ja auch nicht gedacht das der source soooo lang wird,..<br />
grüüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1437761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1437761</guid><dc:creator><![CDATA[zeusosc]]></dc:creator><pubDate>Wed, 16 Jan 2008 15:33:21 GMT</pubDate></item><item><title><![CDATA[Reply to inhalt eines struct  speichern on Wed, 16 Jan 2008 15:32:25 GMT]]></title><description><![CDATA[<p>Nein, der dritte Parameter bestimmt die Anzahl an Array-Elementen, die insgesamt geschrieben werden sollen (der zweite Parameter gibt die Größe eines Array-Elements an).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1437765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1437765</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 16 Jan 2008 15:32:25 GMT</pubDate></item><item><title><![CDATA[Reply to inhalt eines struct  speichern on Wed, 16 Jan 2008 15:51:17 GMT]]></title><description><![CDATA[<p>zeusosc schrieb:</p>
<blockquote>
<p>Hi simon2,</p>
<p>der 3te parameter bestimmt doch die blockgröße die auf &quot;einmal&quot; geschrieben werden soll, da das doch ein stream ist, sollte dieser dann den ganzen struct auf einmal schreiben oder nicht?? gruß...</p>
</blockquote>
<p>Und was gibt der 2. Parameter an ? :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>
<p>Deswegen hatte ich den link angegeben:</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Siehe auch: <a href="http://www.cppreference.com/stdio/fwrite.html" rel="nofollow">http://www.cppreference.com/stdio/fwrite.html</a><br />
...</p>
</blockquote>
<p>Da steht's.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1437787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1437787</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 16 Jan 2008 15:51:17 GMT</pubDate></item></channel></rss>