<?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[Stringklasse]]></title><description><![CDATA[<p>Abend zusammen, ich sitze gerade am += Operator meiner Stringklasse. Sieht im Moment so aus (gekürzte Fassung ohne Zeigerprüfung und Co.)</p>
<pre><code class="language-cpp">MYSTRING&amp; operator += ( const char *s )
{
  ...
  size_t n = strlen( s );
  char *pTmp = new char[n +m_nSize +1];
  ...
  strcat( pTmp, m_pData );
  strcat( pTmp, s );
  ...
  delete [] m_pData;
  m_pData = pTmp;
  ...
  return *this;
}
</code></pre>
<p>Kann man das ganze noch etwas C++ konformer machen (speziell wegen strcat)? - und wenn ja wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/118166/stringklasse</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 07:12:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/118166.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 15 Aug 2005 19:27:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Stringklasse on Mon, 15 Aug 2005 19:28:02 GMT]]></title><description><![CDATA[<p>Abend zusammen, ich sitze gerade am += Operator meiner Stringklasse. Sieht im Moment so aus (gekürzte Fassung ohne Zeigerprüfung und Co.)</p>
<pre><code class="language-cpp">MYSTRING&amp; operator += ( const char *s )
{
  ...
  size_t n = strlen( s );
  char *pTmp = new char[n +m_nSize +1];
  ...
  strcat( pTmp, m_pData );
  strcat( pTmp, s );
  ...
  delete [] m_pData;
  m_pData = pTmp;
  ...
  return *this;
}
</code></pre>
<p>Kann man das ganze noch etwas C++ konformer machen (speziell wegen strcat)? - und wenn ja wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/852852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/852852</guid><dc:creator><![CDATA[Herrmann]]></dc:creator><pubDate>Mon, 15 Aug 2005 19:28:02 GMT</pubDate></item><item><title><![CDATA[Reply to Stringklasse on Mon, 15 Aug 2005 19:44:13 GMT]]></title><description><![CDATA[<p>ich habe sprintf verwendet, ist aber auch nicht so der hit. suche auch nach einer besseren lösung.</p>
<pre><code class="language-cpp">MYSTRING&amp; operator += ( const char *s )
{
  sprintf(m_pData, &quot;%s%s&quot;, m_pData, s);
  return *this;
}
</code></pre>
<p>der vorteil ich habe den operator überladen für mehrere typen, somit ist das<br />
inttostring kein problem mehr.</p>
<pre><code class="language-cpp">MYSTRING&amp; operator += (int i)
{
  sprintf(m_pData, &quot;%s%d&quot;, m_pData, i);
  return *this;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/852869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/852869</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Mon, 15 Aug 2005 19:44:13 GMT</pubDate></item><item><title><![CDATA[Reply to Stringklasse on Mon, 15 Aug 2005 20:46:21 GMT]]></title><description><![CDATA[<p>Danke für die Antwort. Werde dann wohl vorerst bei strcat bleiben. strcat ist in meinem Fall dann doch etwas schneller als sprintf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/852895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/852895</guid><dc:creator><![CDATA[Herrmann]]></dc:creator><pubDate>Mon, 15 Aug 2005 20:46:21 GMT</pubDate></item><item><title><![CDATA[Reply to Stringklasse on Mon, 15 Aug 2005 23:05:30 GMT]]></title><description><![CDATA[<p>Vielleicht mal überlegen, was strncat eigentlich macht ?<br />
Und dann kannst du dir selber was eventuell schnelleres <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="🙄"
    /> zum kopieren bauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/852944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/852944</guid><dc:creator><![CDATA[xyz_]]></dc:creator><pubDate>Mon, 15 Aug 2005 23:05:30 GMT</pubDate></item><item><title><![CDATA[Reply to Stringklasse on Tue, 16 Aug 2005 08:10:46 GMT]]></title><description><![CDATA[<p>Statt strcat kannst Du std::copy verwenden:</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
...
std::copy( m_pData, m_pData + m_nSize, pTmp);
std::copy( s, s + n + 1, pTmp + m_nSize);
</code></pre>
<p>Allerdings musst dann selbst aufpassen, wie und wo Dein \0 mitkopiert wird (strcat macht das für Dich, copy nicht). Wenn m_nSize inklusive \0 ist, dann musst Du ein Element weniger kopieren.</p>
<p>In Deinem Beispielcode verlässt Du Dich darauf, dass in pTmp[0] = '\0' ist. Ansonsten hat das erste strcat nicht den gewünschten Erfolg. Besser wäre es beim ersten Kopieren ein strcpy zu nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/853062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853062</guid><dc:creator><![CDATA[niemand]]></dc:creator><pubDate>Tue, 16 Aug 2005 08:10:46 GMT</pubDate></item></channel></rss>