<?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[Sicheres vsprintf]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>für eine Routine in meiner MySQL-Klasse suche ich eine sichere Methode, um die Argumente zu vervollständigen. Zur Zeit sieht die Funktion folgendermassen aus :</p>
<pre><code class="language-cpp">//Sendet ein Statement ohne Rueckgabewert an den Server
const bool CMySQL::Statement(const char *szQuery, ...)
{
	char szQueryTemp[MAXSQLSTATELENGTH];
	va_list cpArg;

	//Die Anfrage wird vervollstaendigt
	va_start (cpArg, szQuery);
	vsprintf (szQueryTemp, szQuery, cpArg);
	va_end   (cpArg);

	mysql_real_query(m_hMySQL, szQueryTemp, strlen(szQueryTemp));

   	if (mysql_errno(m_hMySQL) == 0)
		return true;
	else
		return false;
}
</code></pre>
<p>Ich habe genau dann ein Problem, wenn die komplette Anfrage länger als MAXSQLSTATELENGTH wird. Leider ist mir kein Weg bekannt, wie ich dieses bereits im vorfeld prüfen kann.<br />
Sollte dieser Fall eintreten, dass verabschiedet sich die Anwendung sang- und klanglos.</p>
<p>Weiss jemand einen Rat, wie man diesem Umstand beseitigen kann ?</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/142901/sicheres-vsprintf</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 01:09:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/142901.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 04 Apr 2006 06:29:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Sicheres vsprintf on Tue, 04 Apr 2006 06:29:26 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>für eine Routine in meiner MySQL-Klasse suche ich eine sichere Methode, um die Argumente zu vervollständigen. Zur Zeit sieht die Funktion folgendermassen aus :</p>
<pre><code class="language-cpp">//Sendet ein Statement ohne Rueckgabewert an den Server
const bool CMySQL::Statement(const char *szQuery, ...)
{
	char szQueryTemp[MAXSQLSTATELENGTH];
	va_list cpArg;

	//Die Anfrage wird vervollstaendigt
	va_start (cpArg, szQuery);
	vsprintf (szQueryTemp, szQuery, cpArg);
	va_end   (cpArg);

	mysql_real_query(m_hMySQL, szQueryTemp, strlen(szQueryTemp));

   	if (mysql_errno(m_hMySQL) == 0)
		return true;
	else
		return false;
}
</code></pre>
<p>Ich habe genau dann ein Problem, wenn die komplette Anfrage länger als MAXSQLSTATELENGTH wird. Leider ist mir kein Weg bekannt, wie ich dieses bereits im vorfeld prüfen kann.<br />
Sollte dieser Fall eintreten, dass verabschiedet sich die Anwendung sang- und klanglos.</p>
<p>Weiss jemand einen Rat, wie man diesem Umstand beseitigen kann ?</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1030000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1030000</guid><dc:creator><![CDATA[SciFi]]></dc:creator><pubDate>Tue, 04 Apr 2006 06:29:26 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres vsprintf on Tue, 04 Apr 2006 07:03:31 GMT]]></title><description><![CDATA[<p>Schau dir mal vsnprintf an:</p>
<pre><code class="language-cpp">int Length = vsnprintf(Buffer, BUFFER_LENGTH, , pArg); // Hab nicht alle Parameter im Kopf, waren aber 4)

			if(Length == -1)
				Buffer[BUFFER_LENGTH - 1] = '\0';
			else
				Buffer[Length] = '\0';
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1030020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1030020</guid><dc:creator><![CDATA[schauMal]]></dc:creator><pubDate>Tue, 04 Apr 2006 07:03:31 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres vsprintf on Tue, 04 Apr 2006 07:38:59 GMT]]></title><description><![CDATA[<p>schauMal schrieb:</p>
<blockquote>
<p>Schau dir mal vsnprintf an:<br />
p]</p>
</blockquote>
<p>Hallo !</p>
<p>Danke für Deine Antwort. Laut MSDN verhält sich das mit vsnprintf so :</p>
<pre><code>int _vsnprintf( char *buffer, size_t count, const char *format, va_list argptr );
</code></pre>
<p>Ist das nicht irgendwie das gleiche in Grün ? Wenn die Anfrage mit dem Argumenten länger als count bzw *buffer wird ?<br />
Gibt es eventuell eine Möglichkeit dieses mittels STL zu bewerkstelligen ? Die Klasse string von WxWidgtes gibt sowas her glaub ich, aber hier verwende ich kein MFC, wxWidgets oder ähnliches.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1030040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1030040</guid><dc:creator><![CDATA[SciFi]]></dc:creator><pubDate>Tue, 04 Apr 2006 07:38:59 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres vsprintf on Tue, 04 Apr 2006 07:41:08 GMT]]></title><description><![CDATA[<p>Setz doch einfach count von vsnprintf auf Deine Maximallänge <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1030043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1030043</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 04 Apr 2006 07:41:08 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres vsprintf on Tue, 04 Apr 2006 07:51:57 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Setz doch einfach count von vsnprintf auf Deine Maximallänge <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>Das mache ich ja jetzt auch schon, aber ich weiss ja nicht immer, wielang die Anfrage Tatsächlich wird. Wenn das zusammensetzen des string länger wird als mein MAXCOUNT, dann habe ich ein Problem.</p>
<p>Das ist jetzt noch eine kleine Anfrage, aber es geht noch länger :</p>
<pre><code class="language-cpp">lpMySQL-&gt;Statement(&quot;INSERT INTO t_NumberSet (nNumberID, nNumber, sNameID, sIDName, \
	                    sNumberFormat) VALUES ('%d', '%d', '%s', '%s', '%s')&quot;,
						GUTSCHRIFT,
						0,
						&quot;GS&quot;,
						&quot;Gutschrift&quot;,
						&quot;%%y%%m%04d&quot;);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1030058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1030058</guid><dc:creator><![CDATA[SciFi]]></dc:creator><pubDate>Tue, 04 Apr 2006 07:51:57 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres vsprintf on Tue, 04 Apr 2006 08:00:13 GMT]]></title><description><![CDATA[<p>Der Sinn von count ist eben dass die Anfrage nicht länger wird. vsnprintf schneidet dann ab. Wenn er keine Auswirkung hätte bräuchte ich den count nicht <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>vsnprintf gibt auch zurück, wieviele Zeichen tatsächlich erzeugt wurden. Wenn der Wert == count ist weisst Du, dass nicht alles gepasst hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1030062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1030062</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 04 Apr 2006 08:00:13 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres vsprintf on Tue, 04 Apr 2006 08:06:06 GMT]]></title><description><![CDATA[<p>Ahh...Ich höre die Groschen fallen <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="🙂"
    /> Das ist jedenfalls ein Schritt in die richtige Richtung. Dynamische Vergösserung und Vermeidung einer MAXCOUNT Angabe wären mir zwar lieber, aber so verhindere ich schonmal einen AppCrash und das ist schonmal eine Menge wert.</p>
<p>Vielen Dank für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1030073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1030073</guid><dc:creator><![CDATA[SciFi]]></dc:creator><pubDate>Tue, 04 Apr 2006 08:06:06 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres vsprintf on Tue, 04 Apr 2006 09:46:12 GMT]]></title><description><![CDATA[<p>warum benutzt du nicht einfach std::strings? die wissen, wie groß sie sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1030170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1030170</guid><dc:creator><![CDATA[100% koffein]]></dc:creator><pubDate>Tue, 04 Apr 2006 09:46:12 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres vsprintf on Tue, 04 Apr 2006 10:34:17 GMT]]></title><description><![CDATA[<p>Das würde ich gerne, aber es mangelt am Wissen. Ich suche ja eine Methode die ich mit string bewältigen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1030200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1030200</guid><dc:creator><![CDATA[SciFi]]></dc:creator><pubDate>Tue, 04 Apr 2006 10:34:17 GMT</pubDate></item></channel></rss>