<?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[variable parameterliste und vsprintf&#x2F;vasprintf]]></title><description><![CDATA[<p>hallo!</p>
<p>ich habe eine methode die sich ähnlich verhält wie ein printf, sprich man kann diese genau so bedienen wie ein printf und der erzeugte text-value wird dann intern für div. sachen verwendet (log-files, wird intern an div. services gesendet übers netzwerk, usw.)</p>
<p>nun hab ich den fall, dass ich den erzeugten wert gerne als stl string/stringstream weiterverwenden möchte, wie stelle ich das an, dass hier nicht zweimal speicher reserviert wird?</p>
<p>beispiel 1:</p>
<pre><code>void bsp1::logInfo (const char *msgtext, ...)
{

    TEXT msg [1000];
    string msgstr;

    va_list arg_ptr;
    va_start (arg_ptr, msgtext);
    vsnprintf(msg, sizeof(msg)-1, msgtext, arg_ptr); 
    va_end (arg_ptr);

    msgstr = msg;
    ..................

}
</code></pre>
<p>beispiel 2:</p>
<pre><code>void bsp2::logInfo (const char *msgtext, ...)
{

    TEXT *msg(null);
    string msgstr;

    va_list arg_ptr;
    va_start (arg_ptr, msgtext);
    vasprintf(&amp;msg , msgtext, arg_ptr); // ist compiler abhaenging!!!
    va_end (arg_ptr);

    msgstr = msg;
    ..................

}
</code></pre>
<p>wenn man nun diese methode öfters aufruft, verschleudert man meiner meinung nach zuviele recourcen. also wie könnte man es besser machen?<br />
und dabei möchte ich nicht mit char-pointern arbeiten, sondern doch die vorteile eines stl strings oder stringstreams genießen <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>
<p>danke für eure hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/163923/variable-parameterliste-und-vsprintf-vasprintf</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 19:15:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/163923.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 03 Nov 2006 08:01:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to variable parameterliste und vsprintf&#x2F;vasprintf on Fri, 03 Nov 2006 08:02:45 GMT]]></title><description><![CDATA[<p>hallo!</p>
<p>ich habe eine methode die sich ähnlich verhält wie ein printf, sprich man kann diese genau so bedienen wie ein printf und der erzeugte text-value wird dann intern für div. sachen verwendet (log-files, wird intern an div. services gesendet übers netzwerk, usw.)</p>
<p>nun hab ich den fall, dass ich den erzeugten wert gerne als stl string/stringstream weiterverwenden möchte, wie stelle ich das an, dass hier nicht zweimal speicher reserviert wird?</p>
<p>beispiel 1:</p>
<pre><code>void bsp1::logInfo (const char *msgtext, ...)
{

    TEXT msg [1000];
    string msgstr;

    va_list arg_ptr;
    va_start (arg_ptr, msgtext);
    vsnprintf(msg, sizeof(msg)-1, msgtext, arg_ptr); 
    va_end (arg_ptr);

    msgstr = msg;
    ..................

}
</code></pre>
<p>beispiel 2:</p>
<pre><code>void bsp2::logInfo (const char *msgtext, ...)
{

    TEXT *msg(null);
    string msgstr;

    va_list arg_ptr;
    va_start (arg_ptr, msgtext);
    vasprintf(&amp;msg , msgtext, arg_ptr); // ist compiler abhaenging!!!
    va_end (arg_ptr);

    msgstr = msg;
    ..................

}
</code></pre>
<p>wenn man nun diese methode öfters aufruft, verschleudert man meiner meinung nach zuviele recourcen. also wie könnte man es besser machen?<br />
und dabei möchte ich nicht mit char-pointern arbeiten, sondern doch die vorteile eines stl strings oder stringstreams genießen <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>
<p>danke für eure hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1167445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1167445</guid><dc:creator><![CDATA[taff]]></dc:creator><pubDate>Fri, 03 Nov 2006 08:02:45 GMT</pubDate></item><item><title><![CDATA[Reply to variable parameterliste und vsprintf&#x2F;vasprintf on Fri, 03 Nov 2006 08:07:44 GMT]]></title><description><![CDATA[<p>taff schrieb:</p>
<blockquote>
<p>und dabei möchte ich nicht mit char-pointern arbeiten, sondern doch die vorteile eines stl strings oder stringstreams genießen <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>Wenn das so ist, warum dann nicht gleich richtig? C++'s IOStreams bieten ihre eigene Methode zur Datenausgabe (über op&lt;&lt;) an - die solltest du eventuell verwenden.</p>
<p>(Ich weiß nicht genau, ob's passt - aber boost::Format wäre auch ein Ansatz)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1167449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1167449</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 03 Nov 2006 08:07:44 GMT</pubDate></item><item><title><![CDATA[Reply to variable parameterliste und vsprintf&#x2F;vasprintf on Fri, 03 Nov 2006 08:15:53 GMT]]></title><description><![CDATA[<p>problem besteht für mich darin, dass alles printf-like sein sollte bei der parameter übergabe, wie soll ich dann dies mittels dem op&lt;&lt; in diese form bringen?<br />
den msgtext selbst durchparsen und alle kombinationen zb. &quot;3d %-20.20s %17lu&quot; selbst auswerten und den parameter von der parameterliste somit richtig formatieren usw.? <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>leider kann ich boost nicht verwenden, leider <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1167456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1167456</guid><dc:creator><![CDATA[taff]]></dc:creator><pubDate>Fri, 03 Nov 2006 08:15:53 GMT</pubDate></item><item><title><![CDATA[Reply to variable parameterliste und vsprintf&#x2F;vasprintf on Fri, 03 Nov 2006 12:56:46 GMT]]></title><description><![CDATA[<p>taff schrieb:</p>
<blockquote>
<p>problem besteht für mich darin, dass alles printf-like sein sollte bei der parameter übergabe, wie soll ich dann dies mittels dem op&lt;&lt; in diese form bringen?</p>
</blockquote>
<p>Hat dir schon mal jemand gesagt, wie unsicher und fehleranfällig der scanf()-Ansatz (und variable Parameterlisten im Allgemeinen) ist? Wenn du die Chance hast, mach einen <strong>großen</strong> Bogen darum.</p>
<p>Ansonsten kommst du wohl um das Umkopieren nicht herum - std::string liefert dir aus gutem Grund <strong>keinen</strong> veränderbaren char-Pointer auf seine Daten.</p>
<p>---</p>
<p>Das folgende ist auf eigene Gefahr: <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="⚠"
    /><br />
Wenn du unbedingt willst, kannst du über <code>const_cast&lt;char*&gt;(msg.c_str())</code> oder <code>&amp;str[0]</code> auf dein Zeichen-Array zugreifen. Aber sorg bitte vorher dafür, daß der String dort genug Platz hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1167673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1167673</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 03 Nov 2006 12:56:46 GMT</pubDate></item><item><title><![CDATA[Reply to variable parameterliste und vsprintf&#x2F;vasprintf on Mon, 06 Nov 2006 08:32:46 GMT]]></title><description><![CDATA[<p>also, die fehleranfälligkeit ist mir nicht ganz so bekannt, aber vielleicht könntest du mir ja eine gute quelle zeigen wo ich das nachlesen kann.</p>
<p>ein problem ist einfach, dass mittels printf ein %-20.20s &quot;kompakter&quot; ist als, wenn man dies mittels einem stringstream nachprogrammieren muss.<br />
weiteres problem ist auch, dass in der firmen internen lib es leider &quot;standard&quot; ist, dass es solche parameter listen mit printf-like sachen gibt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>also die cast sache mit std::string ist mir zugefährlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1169395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1169395</guid><dc:creator><![CDATA[taff]]></dc:creator><pubDate>Mon, 06 Nov 2006 08:32:46 GMT</pubDate></item><item><title><![CDATA[Reply to variable parameterliste und vsprintf&#x2F;vasprintf on Mon, 06 Nov 2006 08:53:19 GMT]]></title><description><![CDATA[<p>taff schrieb:</p>
<blockquote>
<p>also, die fehleranfälligkeit ist mir nicht ganz so bekannt, aber vielleicht könntest du mir ja eine gute quelle zeigen wo ich das nachlesen kann.</p>
</blockquote>
<p>Probier einfach mal aus, was bei einem &quot;printf(&quot;%d&quot;);&quot; oder &quot;int i=1;printf(&quot;%f&quot;,i);&quot; herauskommt. Im Klartext: Niemand <strong>kann</strong> überprüfen, ob die an printf() übergebenen Argumente mit dem Formatstring übereinstimmen, also führt C beim Compilieren nur ein paar Standard-Umwandlungen durch und vertraut ansonsten darauf, daß du weißt, was du dort übergibst.</p>
<p>PS: Ja, Streams sind etwas komplizierter zu handhaben, aber dafür sicherer (im Gegensatz zu printf() WISSEN sie, was für einen Typ sie bekommen, und wie sie damit umgehen müssen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1169409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1169409</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 06 Nov 2006 08:53:19 GMT</pubDate></item><item><title><![CDATA[Reply to variable parameterliste und vsprintf&#x2F;vasprintf on Mon, 06 Nov 2006 09:43:48 GMT]]></title><description><![CDATA[<p>wenn du weniger fehleranfällige formatstings brauchst kann ich boost::format empfehlen</p>
<pre><code class="language-cpp">format x(&quot;%2d, %2d&quot;)

cout &lt;&lt; x % 1 % 3 &lt;&lt; x % 3 % 4;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1169438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1169438</guid><dc:creator><![CDATA[ronny]]></dc:creator><pubDate>Mon, 06 Nov 2006 09:43:48 GMT</pubDate></item><item><title><![CDATA[Reply to variable parameterliste und vsprintf&#x2F;vasprintf on Tue, 07 Nov 2006 07:26:44 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Im Klartext: Niemand <strong>kann</strong> überprüfen, ob die an printf() übergebenen Argumente mit dem Formatstring übereinstimmen, also führt C beim Compilieren nur ein paar Standard-Umwandlungen durch und vertraut ansonsten darauf, daß du weißt, was du dort übergibst.</p>
</blockquote>
<p>ok, dann dürfte ich mir selbst keine listen bauen usw. also irgendwie muss man schon wissen was man macht. jedoch ist auch mir klar, dass sich bei einem printf ungewollte fehler einschleichen können und eben dann nicht von &quot;selbst&quot; gelöst werden wie bei einem stream.</p>
<p>r0nny schrieb:</p>
<blockquote>
<p>wenn du weniger fehleranfällige formatstings brauchst kann ich boost::format empfehlen</p>
</blockquote>
<p>würde ich gerne, leider nicht möglich/erlaubt (firmen-lib <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> )</p>
<p>fazit: danke für eure hilfe, aber wie ihr seht sind mir teilweise die hände gebunden und ich muss wohl mein problem mit einem char* lösen anstatt mit einem std:string <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1170177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170177</guid><dc:creator><![CDATA[taff]]></dc:creator><pubDate>Tue, 07 Nov 2006 07:26:44 GMT</pubDate></item></channel></rss>