<?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[Char-Array als Rückgabewert]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Funktion, die einen char-Pointer zurückgibt. Allerdings möchte ich ein char-Array damit &quot;auffüllen&quot;. Wie ist das denn nun möglich?</p>
<pre><code>struct {
    CHR8 * read (const char * pINI,const char * section,const char * key) {
        char * temp;
        GetPrivateProfileString (section,key,NULL,temp,2147483646,pINI);
        return temp;
    };
} INI;
int main () {
    char x [100];
    x = INI.read (&quot;D:\\TEST.ini&quot;,&quot;Sektion0&quot;,&quot;Schluessel0&quot;);
    cout &lt;&lt; x;
}
</code></pre>
<p>So funktionierts das schonmal nicht! Übrigens, d ich habe ja glaube ich eine anonyme Struktur erstellt (INI). Was ist der Vor- bzw. Nachteil daran?</p>
<p>Wichtige Info <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> : Es wäre toll, wenn man den Header &lt;string&gt; nicht einsetzen würde. Das hat nichts mit &quot;Programmiermasochismus&quot; (s. meinen letzten Post) zu tun, sondern ich möchte einfach nur wissen, wie das auch ohne string gehen würde.</p>
<p>Danke im Voraus!</p>
<p>MfG</p>
<p>Seikuassi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/318266/char-array-als-rückgabewert</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 03:04:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318266.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 06 Jul 2013 09:52:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Char-Array als Rückgabewert on Sat, 06 Jul 2013 09:52:19 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Funktion, die einen char-Pointer zurückgibt. Allerdings möchte ich ein char-Array damit &quot;auffüllen&quot;. Wie ist das denn nun möglich?</p>
<pre><code>struct {
    CHR8 * read (const char * pINI,const char * section,const char * key) {
        char * temp;
        GetPrivateProfileString (section,key,NULL,temp,2147483646,pINI);
        return temp;
    };
} INI;
int main () {
    char x [100];
    x = INI.read (&quot;D:\\TEST.ini&quot;,&quot;Sektion0&quot;,&quot;Schluessel0&quot;);
    cout &lt;&lt; x;
}
</code></pre>
<p>So funktionierts das schonmal nicht! Übrigens, d ich habe ja glaube ich eine anonyme Struktur erstellt (INI). Was ist der Vor- bzw. Nachteil daran?</p>
<p>Wichtige Info <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> : Es wäre toll, wenn man den Header &lt;string&gt; nicht einsetzen würde. Das hat nichts mit &quot;Programmiermasochismus&quot; (s. meinen letzten Post) zu tun, sondern ich möchte einfach nur wissen, wie das auch ohne string gehen würde.</p>
<p>Danke im Voraus!</p>
<p>MfG</p>
<p>Seikuassi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2336985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2336985</guid><dc:creator><![CDATA[PHBU]]></dc:creator><pubDate>Sat, 06 Jul 2013 09:52:19 GMT</pubDate></item><item><title><![CDATA[Reply to Char-Array als Rückgabewert on Sat, 06 Jul 2013 10:03:49 GMT]]></title><description><![CDATA[<p>Seikuassi schrieb:</p>
<blockquote>
<p>ich habe eine Funktion, die einen char-Pointer zurückgibt. Allerdings möchte ich ein char-Array damit &quot;auffüllen&quot;. Wie ist das denn nun möglich?</p>
</blockquote>
<p>Arrays sind nicht kopierbar. (Du kannst die Elemente des Arrays kopieren, nicht aber das Array selbst). Darum kapseln wir rohe Arrays in einer Klasse. Damit werden sie kopierbar.</p>
<p>Seikuassi schrieb:</p>
<blockquote>
<p>Übrigens, d ich habe ja glaube ich eine anonyme Struktur erstellt (INI). Was ist der Vor- bzw. Nachteil daran?</p>
</blockquote>
<p>Keine Ahnung, hab ich noch nie gebraucht. Ein offensichtlicher Nachteil ist mal, dass die Instanz global ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2336990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2336990</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Sat, 06 Jul 2013 10:03:49 GMT</pubDate></item><item><title><![CDATA[Reply to Char-Array als Rückgabewert on Sat, 06 Jul 2013 10:11:29 GMT]]></title><description><![CDATA[<p>Im alten C-Stil:</p>
<pre><code class="language-cpp">char x[100];
strcpy(x, INI.read(&quot;D:\\TEST.ini&quot;,&quot;Sektion0&quot;,&quot;Schluessel0&quot;));
</code></pre>
<p>Dies würde aber leicht einen BufferOverflow hervorrufen.</p>
<p>Also noch ein wenig verbessern:</p>
<pre><code class="language-cpp">char x[100];
strncpy(x, INI.read(&quot;D:\\TEST.ini&quot;,&quot;Sektion0&quot;,&quot;Schluessel0&quot;), 100);
x[99] = 0; // Nullterminierung erzwingen
</code></pre>
<p>P.S. Deine INI.read-Funktion wird dir aber gnadenlos abstürzen, da du nur einen uninitialisierten Zeiger übergibst (und dann auch noch 2 GB als Größe <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>
<p>Also mach es gleich richtig und verwende einen std::string:</p>
<pre><code class="language-cpp">std::string read (const char * pINI,const char * section,const char * key)
{
    const int Size = 100;
    std::string s(Size);
    GetPrivateProfileString (section, key, NULL, &amp;s[0], Size, pINI);
    return s;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2336991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2336991</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 06 Jul 2013 10:11:29 GMT</pubDate></item><item><title><![CDATA[Reply to Char-Array als Rückgabewert on Sat, 06 Jul 2013 11:32:01 GMT]]></title><description><![CDATA[<p>So wie ich das sehe benutzt du schon GetPrivateProfileString falsch. GetPrivateProfileString kopiert bestimmt Text in die Daten auf die temp zeigt. Worauf zeigt temp? Auf nichts. Deswegen crasht es. Wahrscheinlich ist die Zahl 2147483646 für die Länge des Puffers da, was wieder Quatsch ist.<br />
Möglicherweise willst du sowas:</p>
<pre><code>CHR8 * read (const char * pINI,const char * section,const char * key) {
        static char temp[1234];
        GetPrivateProfileString (section,key,NULL,temp,1234,pINI);
        return temp;
    };
</code></pre>
<p>Erstmal haben wir Speicher wo GetPrivateProfileString was rein schreiben kann. Weiterhin ist temp static, sodass nach dem Funktionsaufruf, wo du den Pointer benutzt, der Speicher noch da ist.</p>
<p>Anonyme structs benutzt man halt, wenn man nur eine kleine Zahl dieser Structs anlegen will und dann nicht mehr. Sowas will man ziemlich selten, außerdem schadet das Festlegen eines Namens auch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2337007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2337007</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Sat, 06 Jul 2013 11:32:01 GMT</pubDate></item><item><title><![CDATA[Reply to Char-Array als Rückgabewert on Mon, 05 Aug 2013 18:01:24 GMT]]></title><description><![CDATA[<p>Hallo nochmal,</p>
<p>nwp3  schrieb:</p>
<blockquote>
<p>Weiterhin ist temp static, sodass nach dem Funktionsaufruf, wo du den Pointer benutzt, der Speicher noch da ist.</p>
</blockquote>
<p>Und was ist daran der Vorteil <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="😕"
    /> ? Denn die 1234 Bytes sind ja (wenn man die Funktion bereits aufgerufen hat) immer im Speicher (im Stack?). Bei 1234 Bytes ist mir das ja egal, aber was ist (jetzt kommt wieder etwas Übertriebenes, dafür aber Mögliches), wenn ich jetzt mal kurze Zeit 2 GB brauche, die ich aber nach ein paar Codezeilen wieder freigeben möchte?<br />
Was ist jetzt also der Sinn von static in diesem Fall?</p>
<p>MfG</p>
<p>Seikuassi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343690</guid><dc:creator><![CDATA[PHBU]]></dc:creator><pubDate>Mon, 05 Aug 2013 18:01:24 GMT</pubDate></item><item><title><![CDATA[Reply to Char-Array als Rückgabewert on Mon, 05 Aug 2013 18:21:13 GMT]]></title><description><![CDATA[<p>Hallo nochmal,</p>
<p>habe gerade an LoadString das &quot;normale&quot; als auch das statische Array ausprobiert. Bei dem static brauche ich weniger Arbeitsspeicher (jedenfalls zeigt mir der &quot;Resourcemanager&quot; das so in Win 7 an). Warum ist das so?</p>
<p>MfG</p>
<p>Seikuassi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343696</guid><dc:creator><![CDATA[PHBU]]></dc:creator><pubDate>Mon, 05 Aug 2013 18:21:13 GMT</pubDate></item><item><title><![CDATA[Reply to Char-Array als Rückgabewert on Mon, 05 Aug 2013 18:42:44 GMT]]></title><description><![CDATA[<p>Seikuassi schrieb:</p>
<blockquote>
<p>Betreff: Char-Array als Rückgabewert</p>
<p>ich habe eine Funktion, die einen char-Pointer zurückgibt. Allerdings möchte ich ein char-Array damit &quot;auffüllen&quot;. Wie ist das denn nun möglich?</p>
</blockquote>
<p><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>
<pre><code class="language-cpp">std::string deineFunktion();

int main()
{
  std::string wirdAufgefuellt = deineFunktion();
}
</code></pre>
<p>Wahlweise auch mit std::vector&lt;char&gt;</p>
<p>Rohe Arrays sind nicht kopierbar und nicht zuweisbar. Versuch nicht auf Biegen und Brechen Schei*e zu bauen. C++ kann so einfach sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343706</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 05 Aug 2013 18:42:44 GMT</pubDate></item><item><title><![CDATA[Reply to Char-Array als Rückgabewert on Mon, 05 Aug 2013 19:12:14 GMT]]></title><description><![CDATA[<p>Hallo krümelkacker,</p>
<blockquote>
<p>Rohe Arrays sind nicht kopierbar und nicht zuweisbar.</p>
</blockquote>
<p>Die Frage bzw. das Thema ist schon etwas älter.<br />
Wichtig ist die Frage:</p>
<p>Warum ist in der Funktion eine statisch angelegte Variable in einer Funktion <strong>kleiner</strong> als eine nicht-statische Variable?</p>
<p>Für mich heißt das, dass der Wert im Arbeitsspeicher dauerhaft gespeichert bleibt, bis der Prozess beendet wird.<br />
Warum zum Teufel benötigt aber die nicht-statische Variable mehr RAM <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>
<p>Danke im Voraus!</p>
<p>MfG</p>
<p>Seikuassi</p>
<p>krümelkacker schrieb:</p>
<blockquote>
<p>C++ kann so einfach sein.</p>
</blockquote>
<p>Muss es aber nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> . Scherz <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/2343709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343709</guid><dc:creator><![CDATA[PHBU]]></dc:creator><pubDate>Mon, 05 Aug 2013 19:12:14 GMT</pubDate></item><item><title><![CDATA[Reply to Char-Array als Rückgabewert on Mon, 05 Aug 2013 19:32:42 GMT]]></title><description><![CDATA[<p>Ein Ressourcenmonitor ist kein Programmentwicklungswerkzeug.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343721</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 05 Aug 2013 19:32:42 GMT</pubDate></item><item><title><![CDATA[Reply to Char-Array als Rückgabewert on Mon, 05 Aug 2013 19:48:10 GMT]]></title><description><![CDATA[<p>Hallo SeppJ,</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Ein Ressourcenmonitor ist kein Programmentwicklungswerkzeug.</p>
</blockquote>
<p>Und lügt <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="😕"
    /> ?<br />
Dann bist du auch der Meinung, dass die statische Variable praktisch mehr Speicher verwendet bzw. länger verwendet wird (Programmlebensdauer), oder?</p>
<p>MfG</p>
<p>Seikuassi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343724</guid><dc:creator><![CDATA[PHBU]]></dc:creator><pubDate>Mon, 05 Aug 2013 19:48:10 GMT</pubDate></item><item><title><![CDATA[Reply to Char-Array als Rückgabewert on Mon, 05 Aug 2013 19:54:05 GMT]]></title><description><![CDATA[<p>Seikuassi schrieb:</p>
<blockquote>
<p>Hallo SeppJ,</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Ein Ressourcenmonitor ist kein Programmentwicklungswerkzeug.</p>
</blockquote>
<p>Und lügt <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>
</blockquote>
<p>Wenn du nicht ganz genau weißt, was er macht: Praktisch ja. Weißt du, was er genau macht?</p>
<blockquote>
<p>Dann bist du auch der Meinung, dass die statische Variable praktisch mehr Speicher verwendet bzw. länger verwendet wird (Programmlebensdauer), oder?</p>
</blockquote>
<p><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="😮"
    /> Wo liest du das aus meinem Beitrag heraus? Das ist vollkommener Unsinn. Es ändert sich bloß, wo die Variable liegt. Womit wir wieder beim Thema sind, was der Ressourcenmonitor überhaupt genau anzeigt. Nämlich wohl nicht das, was du denkst. Das ist nämlich ein Tool für den Laien, der eine ungefähre Angabe über Speicherverbrauch seiner Anwendungen möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343726</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 05 Aug 2013 19:54:05 GMT</pubDate></item><item><title><![CDATA[Reply to Char-Array als Rückgabewert on Mon, 05 Aug 2013 20:03:16 GMT]]></title><description><![CDATA[<p>Das statische Array wird vom Compiler anders verwurstet und tritt in Deinem Resourcenmonitor halt nicht auf.<br />
Das hat aber nix mit C++ zu tun.</p>
<p>Oder wächst Dein Programm im Speicher?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343728</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Mon, 05 Aug 2013 20:03:16 GMT</pubDate></item></channel></rss>