<?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[Frage zu string to char*]]></title><description><![CDATA[<p>Hey okay ich hab folgendes Problem ich muss string to char* umwandeln, was ich auch hinbekommen, jedoch gibt es einen Problem ich kann den Speicherplatz nicht mehr frei geben aber seht selbst:</p>
<pre><code class="language-cpp">char *Wert_Ermitteln(string search, char *datei)
{
    string buf,wert;
    ifstream ID(datei);
    if(!ID.is_open())
    {
        MessageBox(NULL,&quot;Die angegebene Datei könnte nicht geöffnet werden&quot;,&quot;Fehler&quot;,0);
        return NULL;
    }
    for (int i=1;!ID.eof();i++)
    {
        getline(ID, buf);
        if(-1!= buf.find(search,0))
        {
           buf.replace(0,(search.length()),&quot;&quot;);
           int S = buf.find(&quot;;&quot;,0);
           buf.replace(S,1,&quot;&quot;);
           wert=buf;
           break;
        }
    }
    ID.close();
    char *ary = new char[wert.length()+1];
    strcpy (ary, wert.c_str());
    return ary;
    delete[] ary;
}
</code></pre>
<p>Wie ihr seht ist mein return vor delete was heißt das der Speicherplatz nicht mehr freigegeben wird. Wäre Top wenn jemand eine Idee dazu hat.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/201290/frage-zu-string-to-char</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 21:52:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/201290.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Dec 2007 16:45:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu string to char* on Thu, 27 Dec 2007 16:45:38 GMT]]></title><description><![CDATA[<p>Hey okay ich hab folgendes Problem ich muss string to char* umwandeln, was ich auch hinbekommen, jedoch gibt es einen Problem ich kann den Speicherplatz nicht mehr frei geben aber seht selbst:</p>
<pre><code class="language-cpp">char *Wert_Ermitteln(string search, char *datei)
{
    string buf,wert;
    ifstream ID(datei);
    if(!ID.is_open())
    {
        MessageBox(NULL,&quot;Die angegebene Datei könnte nicht geöffnet werden&quot;,&quot;Fehler&quot;,0);
        return NULL;
    }
    for (int i=1;!ID.eof();i++)
    {
        getline(ID, buf);
        if(-1!= buf.find(search,0))
        {
           buf.replace(0,(search.length()),&quot;&quot;);
           int S = buf.find(&quot;;&quot;,0);
           buf.replace(S,1,&quot;&quot;);
           wert=buf;
           break;
        }
    }
    ID.close();
    char *ary = new char[wert.length()+1];
    strcpy (ary, wert.c_str());
    return ary;
    delete[] ary;
}
</code></pre>
<p>Wie ihr seht ist mein return vor delete was heißt das der Speicherplatz nicht mehr freigegeben wird. Wäre Top wenn jemand eine Idee dazu hat.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1426909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1426909</guid><dc:creator><![CDATA[fsgygfydgf]]></dc:creator><pubDate>Thu, 27 Dec 2007 16:45:38 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Thu, 27 Dec 2007 17:00:19 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>wenn du ne Methode mit return beendest, wird der Code natürlich nicht mehr<br />
ausgeführt.<br />
Also ich würde an deiner Stelle ein std::string zurückgeben, dann wird<br />
der Speicher ja automatisch freigegeben, wenn das Scope verlassen wird.<br />
Ansonsten wird dir nichts anderes übrig bleiben als dich nach dem Methoden-Aufruf<br />
jedesmal um das delete zu kümmern.</p>
<p>Gruß.<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1426918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1426918</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 27 Dec 2007 17:00:19 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Thu, 27 Dec 2007 17:15:20 GMT]]></title><description><![CDATA[<p>oder du übergibst ne referez auf nen std::string und befüllst diesen und die methode gibt true zurück btw. false statt NULL.</p>
<p><em>Dieses Post enthält vertrauliche und/oder rechtlich geschützte Informationen. Wenn Sie nicht der richtige Adressat sind oder dieses Post irrtürmlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie dieses Post. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieses Posts ist nicht gestattet.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1426922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1426922</guid><dc:creator><![CDATA[blidz]]></dc:creator><pubDate>Thu, 27 Dec 2007 17:15:20 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Thu, 27 Dec 2007 17:15:44 GMT]]></title><description><![CDATA[<p>Nein es muss char* sein.<br />
Würde es so gehen? Ich denke ja.</p>
<pre><code class="language-cpp">char *ary;

char *Wert_Ermitteln1(string search, char *datei)
{
    string buf,wert;
    ifstream ID(datei);
    if(!ID.is_open())
    {
        MessageBox(NULL,&quot;Die angegebene Datei könnte nicht geöffnet werden&quot;,&quot;Fehler&quot;,0);
        return NULL;
    }
    for (int i=1;!ID.eof();i++)
    {
        getline(ID, buf);
        if(-1!= buf.find(search,0))
        {
           buf.replace(0,(search.length()),&quot;&quot;);
           int S = buf.find(&quot;;&quot;,0);
           buf.replace(S,1,&quot;&quot;);
           wert=buf;
           break;
        }
    }
    ID.close();
    char *ary = new char[wert.length()+1];
    strcpy (ary, wert.c_str());
    return ary;
    delete[] ary;
}

char *Wert_Ermitteln(string search, char *datei)
{
    char * wert=Wert_Ermitteln1(search, datei);
    delete[] ary;
    return wert;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1426923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1426923</guid><dc:creator><![CDATA[ruirui]]></dc:creator><pubDate>Thu, 27 Dec 2007 17:15:44 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Thu, 27 Dec 2007 17:19:06 GMT]]></title><description><![CDATA[<p>ruirui schrieb:</p>
<blockquote>
<p>Nein es muss char* sein.</p>
</blockquote>
<p>Warum?</p>
<p>Das delete nach dem return bringt immer noch nichts und ein delete auf einen Pointer den du zurückgeben willst ist falsch.</p>
<p><em>Dieses Post enthält vertrauliche und/oder rechtlich geschützte Informationen. Wenn Sie nicht der richtige Adressat sind oder dieses Post irrtürmlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie dieses Post. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieses Posts ist nicht gestattet.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1426924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1426924</guid><dc:creator><![CDATA[blidz]]></dc:creator><pubDate>Thu, 27 Dec 2007 17:19:06 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Thu, 27 Dec 2007 17:24:20 GMT]]></title><description><![CDATA[<p>Ganz einfach weil ich die Funktion für WinApi brauch um zum Beispiel unterschiedliche Sprachen nutzen zukönnen.Zum Beispiel so :<br />
[cpp]<br />
MessageBox(hwnd, Wert_Ermitteln(&quot;G_Tab=&quot;,LANG), Wert_Ermitteln(&quot;H_Tab=&quot;,LANG), MB_OK | MB_ICONERROR);[code]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1426926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1426926</guid><dc:creator><![CDATA[gkfiftst]]></dc:creator><pubDate>Thu, 27 Dec 2007 17:24:20 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Thu, 27 Dec 2007 17:48:42 GMT]]></title><description><![CDATA[<p>Dann würde ich den Text aber nicht jedesmal aus einer Datei lesen, sondern nur einmal und dann irgendwo im Speicher halten und einen Zeiger auf diesen string zurückgeben. Dann brauchst du ihn nicht immer neu anlegen und wieder löschen.</p>
<p><em>Dieses Post enthält vertrauliche und/oder rechtlich geschützte Informationen. Wenn Sie nicht der richtige Adressat sind oder dieses Post irrtürmlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie dieses Post. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieses Posts ist nicht gestattet.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1426933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1426933</guid><dc:creator><![CDATA[blidz]]></dc:creator><pubDate>Thu, 27 Dec 2007 17:48:42 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Thu, 27 Dec 2007 18:06:11 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">char *Wert_Ermitteln1(std::string const&amp; search, const char* file_name)
{
    std::ifstream file_stream(file_name);
    if (!file_stream) return NULL;
</code></pre>
<pre><code class="language-cpp">if (std::string::npos != buf.find(search, 0))
</code></pre>
<p>=&gt; std::size_t ist nicht negativ! usw. ... dein Code ist eine Ansammlung von Fehlern ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1426948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1426948</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Thu, 27 Dec 2007 18:06:11 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Thu, 27 Dec 2007 21:47:06 GMT]]></title><description><![CDATA[<p>ruirui schrieb:</p>
<blockquote>
<p>Nein es muss char* sein...</p>
</blockquote>
<p>Wenn Du in einer Funktion unbedingt dynamisch ein char-Array anlegen willst, das Du ausserhalb brauchst, bleibt Dir nicht Anderes übrig, als das Löschen auch außerhalb anzustoßen. Schließlich gibt's bei der Entscheidung, ob der Speicher noch gebraucht wird, keinen Kompromiss.<br />
Das kannst Du quick&amp;dirty erledigen</p>
<pre><code class="language-cpp">void nutzendeFunktion() {
   char * arr = Wert_Ermitteln1(search, datei);
   WINAPI_Funktion_die_charArray_braucht(arr);
   delete[] arr;
}
</code></pre>
<p>... oder mit allem möglichen Tricks wie</p>
<pre><code class="language-cpp">class Aufraeumer {
   std::vector&lt;char*&gt; arrays;
public:
   void add(char* neuesArray) { arrays.push_back(neuesArray); }
   ~Aufraeumer() { 
      std::vector&lt;char*&gt;::const_iterator it = arrays.begin();
      while(it != arrays.begin()) {
         delete[] *it;
         ++it;
      }
   }
};

// ACHTUNG: Nicht Threadsafe !!!
static Aufraeumer aufraeumer;

char *Wert_Ermitteln1(string search, char *datei)
{
// ...  Restkram
    char *ary = new char[wert.length()+1];
   aufraeumer.add(ary);
   return ary;
}
</code></pre>
<p>... oder smartpointer (falls die Schnittstelle das hergibt) ... oder sonstwie.</p>
<p>Aber letztlich bleibt's: Wird's außerhalb gebraucht, muss es außerhalb gelöscht werden.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427025</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 27 Dec 2007 21:47:06 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Thu, 27 Dec 2007 23:39:59 GMT]]></title><description><![CDATA[<p>Gib eine Kopie von std::string zurück, pack diese per Konstruktor in einen char-vector und übergibt dann per &amp;vec[0] einfach den entsprechenden char-Zeiger. Fertig! <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427064</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Thu, 27 Dec 2007 23:39:59 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Fri, 28 Dec 2007 05:40:51 GMT]]></title><description><![CDATA[<p>Also std::vector&lt;char*&gt; und so n Kram brauchst du nicht.</p>
<p>Wegen des tollen Spamfilters gibts den Code hier<br />
<a href="http://rafb.net/p/M2uxBY76.html" rel="nofollow">http://rafb.net/p/M2uxBY76.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427101</guid><dc:creator><![CDATA[so]]></dc:creator><pubDate>Fri, 28 Dec 2007 05:40:51 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Fri, 28 Dec 2007 10:58:52 GMT]]></title><description><![CDATA[<p>du hast da ja auch nix von der Problematik drin ... nur einen anderen Lösungsvorschlag für das Ausgangsproblem ... der war aber, soweit ich weiß, nicht gefragt ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427161</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Fri, 28 Dec 2007 10:58:52 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Fri, 28 Dec 2007 12:57:41 GMT]]></title><description><![CDATA[<p>string to char* ist drin und wie es richtig gelöscht wird (das einfügen in die map sollte eigentlich in den Konstruktor, sonst wird immer wieder gemacht).</p>
<p>was für eine Problematik denn sonst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427211</guid><dc:creator><![CDATA[so]]></dc:creator><pubDate>Fri, 28 Dec 2007 12:57:41 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Fri, 28 Dec 2007 13:22:14 GMT]]></title><description><![CDATA[<p>Um einen &quot;LPCSTR&quot; an eine Win-API Funktion zu übergeben, einfach &quot;string::c_str()&quot; verwenden:</p>
<pre><code class="language-cpp">std::string s = get_string();

MessageBox(..., s.c_str(), ...);
</code></pre>
<p>Und nur, wenn wirklich ein nicht-konstantes Char-Array benötigt wird, sollte man dieses bereitstellen und dafür kann man ja dann ideal vector&lt;char&gt;(x) benutzen.</p>
<p>Warum immer noch von Hand mit char-arrays hantiert wird, kann ich einfach nicht verstehen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427220</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Fri, 28 Dec 2007 13:22:14 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Fri, 28 Dec 2007 13:39:10 GMT]]></title><description><![CDATA[<p>Th schrieb:</p>
<blockquote>
<p>Warum immer noch von Hand mit char-arrays hantiert wird, kann ich einfach nicht verstehen...</p>
</blockquote>
<p>Weil diese Personen kein C++ können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427230</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 28 Dec 2007 13:39:10 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Fri, 28 Dec 2007 13:46:32 GMT]]></title><description><![CDATA[<p>Vielleicht sollte man dann noch ein Pseudo-C++ Forum hier erzeugen, in der die ganzen Threads dann verschoben werden können <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1427234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427234</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Fri, 28 Dec 2007 13:46:32 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Fri, 28 Dec 2007 14:32:59 GMT]]></title><description><![CDATA[<p>Th schrieb:</p>
<blockquote>
<p>Vielleicht sollte man dann noch ein Pseudo-C++ Forum hier erzeugen, in der die ganzen Threads dann verschoben werden können <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>
</blockquote>
<p>Nö, man sollte dem Threadsteller klipp und klar sagen (wie inzwischen ja auch geschehen ist), dass er definitiv <em>kein</em> <code>char*</code> braucht sondern mit <code>string</code> bestens bedient ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427253</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Fri, 28 Dec 2007 14:32:59 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Fri, 28 Dec 2007 18:08:30 GMT]]></title><description><![CDATA[<p>Sorry, Konrad, hast du wohl meine Ironie nicht verstanden?<br />
Ich selber hatte ja den Hinweis auf string::c_str() gebracht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427338</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Fri, 28 Dec 2007 18:08:30 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Fri, 28 Dec 2007 18:47:23 GMT]]></title><description><![CDATA[<p>Th schrieb:</p>
<blockquote>
<p>Sorry, Konrad, hast du wohl meine Ironie nicht verstanden?</p>
</blockquote>
<p>*g* doch, schon. Aber ich wollte nicht, dass da noch jemand auf dumme Gedanken kommt. (Nö, die Gefahr bestand nicht. Trotzdem …)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427362</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Fri, 28 Dec 2007 18:47:23 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Fri, 28 Dec 2007 20:04:28 GMT]]></title><description><![CDATA[<p>Th schrieb:</p>
<blockquote>
<p>Ich selber hatte ja den Hinweis auf string::c_str() gebracht.</p>
</blockquote>
<p>Was er schon von Anfang an hatte. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427392</guid><dc:creator><![CDATA[so]]></dc:creator><pubDate>Fri, 28 Dec 2007 20:04:28 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Fri, 28 Dec 2007 20:14:02 GMT]]></title><description><![CDATA[<p>so schrieb:</p>
<blockquote>
<p>Th schrieb:</p>
<blockquote>
<p>Ich selber hatte ja den Hinweis auf string::c_str() gebracht.</p>
</blockquote>
<p>Was er schon von Anfang an hatte. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>… aber an der falschen Stelle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427399</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Fri, 28 Dec 2007 20:14:02 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu string to char* on Fri, 28 Dec 2007 20:23:54 GMT]]></title><description><![CDATA[<p>dann bringt es aber nix die methode nochmal zu nennen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1427407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1427407</guid><dc:creator><![CDATA[so]]></dc:creator><pubDate>Fri, 28 Dec 2007 20:23:54 GMT</pubDate></item></channel></rss>