<?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 in char* casten]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>1.) Situation<br />
zur Zeit habe ich ein Projekt am laufen, in dem u.a. ofstream und ifstream zum Einsatz kommen, um die Daten eines erstellten Profils in eine Binärdatei zu speichern und später wieder aufrufen zu können.<br />
Die Daten des Profils sind alle in einer Struktur (struct Profil) deklariert.<br />
Ich stelle kurz ein paar Ausschnitte des Codes aus meiner DLL (Data.dll) vor:</p>
<pre><code class="language-cpp">//Data.h
#pragma once
#ifdef DATA_EXPORTS
#define DATA __declspec (dllexport)
#else
#define DATA __declspec (dllimport)
#endif
#include &lt;universal.h&gt;

struct DATA Profil
{
	string nickname;
	string passwort;
	string username;
	string password;
	string dateiname;
	char anrede[4];
	char vorname[30];
	char nachname[30];
	int alter;
	char email_adresse[100];
	void Erstellen(void);
	void Speichern(void);
	void Laden(void);
	void System(void);
};
</code></pre>
<p>Zum Speichern und Laden der char und int daten verwende ich die folgenden Befehle. Funktionieren auch einwandfrei.</p>
<pre><code class="language-cpp">//Data.cpp
#include &lt;universal.h&gt;
Profil Acc; // Erstellung einer Instanz (Acc).

...
... Hauptrountine und andere Funktionen
...

void Profil::Save(void)
{
...
...
...

        ofstream Save(Acc.dateiname.c_str(), ios::binary);
	Save.write(Acc.anrede, sizeof (Acc.anrede));
	Save.write(Acc.vorname, sizeof (Acc.vorname));
	Save.write(Acc.nachname, sizeof (Acc.nachname));
	Save.write(reinterpret_cast&lt;char*&gt; (&amp;Acc.alter), sizeof (int));
	Save.write(Acc.email_adresse, sizeof (Acc.email_adresse));
	Save.close();

...
...
...
}

void Profil::Load(void)
{
...
...
...

        ifstream Load (Acc.dateiname.c_str(), ios::binary);
	Load.read(Acc.anrede, sizeof (Acc.anrede));
	Load.read(Acc.vorname, sizeof (Acc.vorname));
	Load.read(Acc.nachname, sizeof (Acc.nachname));
	Load.read(reinterpret_cast&lt;char*&gt; (&amp;Acc.alter), sizeof (int));
	Load.read(Acc.email_adresse, sizeof (Acc.email_adresse));
	Load.close ();

...
...
...
}
</code></pre>
<p>Wie ihr gut sehen könnt speichere ich die char daten ganz normal ab und die int daten caste ich mit dem C++ reinterpret_cast Operator nach char*.</p>
<p>folgendes Problem:<br />
aber wie und womit caste ich die &gt;string-daten&lt; nach char* ? sodass ich sie ordnungsgemäß abspeichern und wieder aufrufen kann. Denn bei string da zieht diese reinterpret_cast methode nicht ^^ ...<br />
Danke schonmal im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/242184/string-in-char-casten</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 03:19:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/242184.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 31 May 2009 17:40:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to string in char* casten on Sun, 31 May 2009 17:41:40 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>1.) Situation<br />
zur Zeit habe ich ein Projekt am laufen, in dem u.a. ofstream und ifstream zum Einsatz kommen, um die Daten eines erstellten Profils in eine Binärdatei zu speichern und später wieder aufrufen zu können.<br />
Die Daten des Profils sind alle in einer Struktur (struct Profil) deklariert.<br />
Ich stelle kurz ein paar Ausschnitte des Codes aus meiner DLL (Data.dll) vor:</p>
<pre><code class="language-cpp">//Data.h
#pragma once
#ifdef DATA_EXPORTS
#define DATA __declspec (dllexport)
#else
#define DATA __declspec (dllimport)
#endif
#include &lt;universal.h&gt;

struct DATA Profil
{
	string nickname;
	string passwort;
	string username;
	string password;
	string dateiname;
	char anrede[4];
	char vorname[30];
	char nachname[30];
	int alter;
	char email_adresse[100];
	void Erstellen(void);
	void Speichern(void);
	void Laden(void);
	void System(void);
};
</code></pre>
<p>Zum Speichern und Laden der char und int daten verwende ich die folgenden Befehle. Funktionieren auch einwandfrei.</p>
<pre><code class="language-cpp">//Data.cpp
#include &lt;universal.h&gt;
Profil Acc; // Erstellung einer Instanz (Acc).

...
... Hauptrountine und andere Funktionen
...

void Profil::Save(void)
{
...
...
...

        ofstream Save(Acc.dateiname.c_str(), ios::binary);
	Save.write(Acc.anrede, sizeof (Acc.anrede));
	Save.write(Acc.vorname, sizeof (Acc.vorname));
	Save.write(Acc.nachname, sizeof (Acc.nachname));
	Save.write(reinterpret_cast&lt;char*&gt; (&amp;Acc.alter), sizeof (int));
	Save.write(Acc.email_adresse, sizeof (Acc.email_adresse));
	Save.close();

...
...
...
}

void Profil::Load(void)
{
...
...
...

        ifstream Load (Acc.dateiname.c_str(), ios::binary);
	Load.read(Acc.anrede, sizeof (Acc.anrede));
	Load.read(Acc.vorname, sizeof (Acc.vorname));
	Load.read(Acc.nachname, sizeof (Acc.nachname));
	Load.read(reinterpret_cast&lt;char*&gt; (&amp;Acc.alter), sizeof (int));
	Load.read(Acc.email_adresse, sizeof (Acc.email_adresse));
	Load.close ();

...
...
...
}
</code></pre>
<p>Wie ihr gut sehen könnt speichere ich die char daten ganz normal ab und die int daten caste ich mit dem C++ reinterpret_cast Operator nach char*.</p>
<p>folgendes Problem:<br />
aber wie und womit caste ich die &gt;string-daten&lt; nach char* ? sodass ich sie ordnungsgemäß abspeichern und wieder aufrufen kann. Denn bei string da zieht diese reinterpret_cast methode nicht ^^ ...<br />
Danke schonmal im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718744</guid><dc:creator><![CDATA[DeltaMan]]></dc:creator><pubDate>Sun, 31 May 2009 17:41:40 GMT</pubDate></item><item><title><![CDATA[Reply to string in char* casten on Mon, 01 Jun 2009 09:06:15 GMT]]></title><description><![CDATA[<p>Meinst du mit &quot;string Daten&quot; std::string? Falls ja, dann kannst du das mit der Memberfunktion c_str() lösen. Also z.B.</p>
<pre><code class="language-cpp">std::string foo = &quot;bar&quot;;
foo.c_str(); // wäre dann char*
</code></pre>
<p>Allerdings kannst du std::string auch einfach in eine Datei schreiben ohne ihn Umzuwandeln. Das ginge mit</p>
<pre><code class="language-cpp">std::ofstream of (&quot;foo.txt&quot;);
of &lt;&lt; foo &lt;&lt; &quot;\n&quot;; // fügt noch einen Zeilenumbruch ein, macht es einfach die Datei wieder einzulesen
</code></pre>
<p>Have fun!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718931</guid><dc:creator><![CDATA[basti33]]></dc:creator><pubDate>Mon, 01 Jun 2009 09:06:15 GMT</pubDate></item><item><title><![CDATA[Reply to string in char* casten on Mon, 01 Jun 2009 12:58:38 GMT]]></title><description><![CDATA[<p>jo, also hasts schon erfasst - std:string meine ich auch;</p>
<p>NUR das problem ist, c_str() ist ein &lt;const char*&gt;-Element und an der stelle mukkt auch mein Compiler rum, dass es ich const char* nicht nach char* konvertieren kann</p>
<pre><code>Fehler	1 error C2664: 'std::basic_istream&lt;_Elem,_Traits&gt;::read': Konvertierung des Parameters 1 von 'const char *' in 'char *' nicht möglich
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1719040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719040</guid><dc:creator><![CDATA[DeltaMan]]></dc:creator><pubDate>Mon, 01 Jun 2009 12:58:38 GMT</pubDate></item><item><title><![CDATA[Reply to string in char* casten on Mon, 01 Jun 2009 13:04:49 GMT]]></title><description><![CDATA[<p>Nun, wenn du die Daten nicht verändern möchtest, solltest du das const mit Hilfe eines const_cast wegbekommen. Aber das erlaubt nicht die Daten zu verändern, sondern kann lediglich helfen die Compilerfehler zu umgehen. Ansonsten könntest du die Strings aber wie gesagt auch einfach so in die Datei schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719044</guid><dc:creator><![CDATA[basti33]]></dc:creator><pubDate>Mon, 01 Jun 2009 13:04:49 GMT</pubDate></item><item><title><![CDATA[Reply to string in char* casten on Mon, 01 Jun 2009 13:40:39 GMT]]></title><description><![CDATA[<p>OK, thanks man. Jetzt funzt das korrekt <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/1719085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719085</guid><dc:creator><![CDATA[DeltaMan]]></dc:creator><pubDate>Mon, 01 Jun 2009 13:40:39 GMT</pubDate></item><item><title><![CDATA[Reply to string in char* casten on Tue, 02 Jun 2009 11:23:52 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-1819.html" rel="nofollow">rüdiger</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-8.html" rel="nofollow">Rund um die Programmierung</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719538</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Tue, 02 Jun 2009 11:23:52 GMT</pubDate></item><item><title><![CDATA[Reply to string in char* casten on Tue, 02 Jun 2009 12:33:15 GMT]]></title><description><![CDATA[<p>basti33 schrieb:</p>
<blockquote>
<p>Nun, wenn du die Daten nicht verändern möchtest, solltest du das const mit Hilfe eines const_cast wegbekommen. Aber das erlaubt nicht die Daten zu verändern, sondern kann lediglich helfen die Compilerfehler zu umgehen. Ansonsten könntest du die Strings aber wie gesagt auch einfach so in die Datei schreiben.</p>
</blockquote>
<p>Sach mal, ist eigentlich &quot;internationale cast-Schmuddelwoche&quot; ?</p>
<p>Alle Welt gräbt sich tiefe und häßliche Gruben mit Rumcasten statt mit sauberen Lösungen.<br />
Wenn ein char* erwartet wird, ist es doch ein Leichtes, einen solchen zur Verfügung zu stellen...</p>
<pre><code class="language-cpp">struct string_copy {
   string&amp; orig;
   char* cpy;
   string_copy(string&amp; s) : orig(s), cpy(new char[s.length() + 1]) {
      copy(orig.begin(), orig.end(), cpy);
      cpy[orig.length()] = '\0';
   }
   char* operator() { return cpy; }
   ~string_copy() { 
      copy(cpy, cpy + orig.length(), &amp;orig[0]);
      delete[] cpy;
   }
};

...
   string s = &quot;Juppi&quot;;
   {
      string_copy cpy(s);
      char_stern_Funktion(cpy);
   }
...
</code></pre>
<p>(Lösungsskizze)<br />
Kann man noch um 100 tolle Features erweitern, aber das klappt so schonmal und ist sicher (im Rahmen der &quot;üblichen char*-Sicherheit&quot;);</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719579</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 02 Jun 2009 12:33:15 GMT</pubDate></item><item><title><![CDATA[Reply to string in char* casten on Tue, 02 Jun 2009 12:59:24 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Alle Welt gräbt sich tiefe und häßliche Gruben mit Rumcasten statt mit sauberen Lösungen.</p>
</blockquote>
<p>Was genau ist denn an diesem const_cast nun so schlimm?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719617</guid><dc:creator><![CDATA[basti33]]></dc:creator><pubDate>Tue, 02 Jun 2009 12:59:24 GMT</pubDate></item><item><title><![CDATA[Reply to string in char* casten on Tue, 02 Jun 2009 13:22:16 GMT]]></title><description><![CDATA[<p>basti33 schrieb:</p>
<blockquote>
<p>Was genau ist denn an diesem const_cast nun so schlimm?</p>
</blockquote>
<p>Wenn er nun sowas macht, was er ja auch tut (Fehlermeldung lesen):</p>
<pre><code class="language-cpp">// ...
ifstream Load (Acc.dateiname.c_str(), ios::binary);

Load.read(const_cast&lt;char*&gt;(Acc.nickname.c_str()), sizeof(Acc.nickname));

// Dann ist das undefiniertes Verhalten und völliger Scheiss.
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719633</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 02 Jun 2009 13:22:16 GMT</pubDate></item><item><title><![CDATA[Reply to string in char* casten on Tue, 02 Jun 2009 13:29:59 GMT]]></title><description><![CDATA[<blockquote>
<p>Sach mal, ist eigentlich &quot;internationale cast-Schmuddelwoche&quot; ?</p>
</blockquote>
<p>Hab ich mich auch schon gefragt. Scheint ein beliebtes Mittel zu sein um Compiler Errors zu beheben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719642</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Tue, 02 Jun 2009 13:29:59 GMT</pubDate></item></channel></rss>