<?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[String mit dynamischer Länge]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich möchte einen String (als char*) erzeugen, der nur aus s besteht. Er soll eine vorgegebene Länge haben.</p>
<p>Meine Idee:</p>
<pre><code>char *s = &quot;&quot;;

for(int j = 0; j &lt; gewuenschteLaenge; j++)
{
	s = strcat(s,&quot;s&quot;);
}
</code></pre>
<p>Für den Compiler kein Problem, beim Ausführen verursacht der Code allerdings einen Absturz.<br />
Woran liegt das?<br />
Gibt es eine bessere Möglichkeit?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/179871/string-mit-dynamischer-länge</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 10:54:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/179871.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 Apr 2007 07:10:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to String mit dynamischer Länge on Thu, 26 Apr 2007 07:10:48 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich möchte einen String (als char*) erzeugen, der nur aus s besteht. Er soll eine vorgegebene Länge haben.</p>
<p>Meine Idee:</p>
<pre><code>char *s = &quot;&quot;;

for(int j = 0; j &lt; gewuenschteLaenge; j++)
{
	s = strcat(s,&quot;s&quot;);
}
</code></pre>
<p>Für den Compiler kein Problem, beim Ausführen verursacht der Code allerdings einen Absturz.<br />
Woran liegt das?<br />
Gibt es eine bessere Möglichkeit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273686</guid><dc:creator><![CDATA[joergh]]></dc:creator><pubDate>Thu, 26 Apr 2007 07:10:48 GMT</pubDate></item><item><title><![CDATA[Reply to String mit dynamischer Länge on Thu, 26 Apr 2007 07:16:21 GMT]]></title><description><![CDATA[<p>Du musst Speicher für jedes Zeichen reservieren.</p>
<p>Es gibt eine bessere Variante als char* nämlich std::string.</p>
<pre><code class="language-cpp">std::string s;
for(int j = 0; j &lt; gewuenschteLaenge; j++)
{
     s.push_back(&quot;s&quot;);
}
</code></pre>
<p>oder noch besser...</p>
<pre><code class="language-cpp">std::string s;
s.insert(s.end(),gewuenschteLaenge,&quot;s&quot;);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1273691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273691</guid><dc:creator><![CDATA[Paddy82]]></dc:creator><pubDate>Thu, 26 Apr 2007 07:16:21 GMT</pubDate></item><item><title><![CDATA[Reply to String mit dynamischer Länge on Thu, 26 Apr 2007 07:19:02 GMT]]></title><description><![CDATA[<p>Das liegt daran, daß du definitiv nicht genug Speicher bereitgestellt hast (und der bereitgestellte Speicher nebenbei schreibgeschützt ist). Die bessere Lösung ist auf jeden Fall, std::string zu verwenden (der wächst mit).</p>
<p>Wenn das wirklich nicht geht (und imho brauchst du gute Gründe, warum std::string nicht verwendbar sein sollte), solltest du das <code>char* s=&quot;&quot;;</code> ersetzen durch <code>char* s=new char[gewuenschteLaenge+1];</code></p>
<p>(PS: und strcat() ist für diese Aufgabe etwas übertrieben ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273692</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 26 Apr 2007 07:19:02 GMT</pubDate></item><item><title><![CDATA[Reply to String mit dynamischer Länge on Thu, 26 Apr 2007 07:41:38 GMT]]></title><description><![CDATA[<p>Das liegt daran, dass du keinen Speicher anforderst.</p>
<pre><code class="language-cpp">char *s = new char[gewuenschteLaenge + 1];

for(int j = 0; j &lt; gewuenschteLaenge; j++)
{
    s[j] = 's';
}
s[j] = '\0';
</code></pre>
<p>Die bessere Lösung wäre ein std::string. Wie in einem anderen Thread hier gerade diskutiert wurde, hat string aber keine portable Möglichkeit, um etwas anzuhängen. Daher musst etwas in der Richtung machen:</p>
<pre><code class="language-cpp">std::vector&lt;char&gt; temp_s;
temp_s.push_back('s');
std::string s(temp_s.begin(), temp_s.end());
</code></pre>
<p>Oder du lässt es gleich im vector.</p>
<p>Edit: Mal wieder Null am Ende vergessen :o</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273693</guid><dc:creator><![CDATA[viande]]></dc:creator><pubDate>Thu, 26 Apr 2007 07:41:38 GMT</pubDate></item><item><title><![CDATA[Reply to String mit dynamischer Länge on Thu, 26 Apr 2007 07:26:07 GMT]]></title><description><![CDATA[<p>viande schrieb:</p>
<blockquote>
<p>Die bessere Lösung wäre ein std::string. Wie in einem anderen Thread hier gerade diskutiert wurde, hat string aber keine portable Möglichkeit, um etwas anzuhängen.</p>
</blockquote>
<p>Wer sagt das? std::string hat die Methoden push_back() zum Anhängen einzelner Zeichen und append() zum Anhängen von Zeichenfolgen (letzteres sogar in einer Version, die n Wiederholungen des selben Zeichens anhängen kann).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273699</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 26 Apr 2007 07:26:07 GMT</pubDate></item><item><title><![CDATA[Reply to String mit dynamischer Länge on Thu, 26 Apr 2007 07:39:13 GMT]]></title><description><![CDATA[<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-179812-and-start-is-10.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-179812-and-start-is-10.html</a><br />
Aber wenn du das so sagst, guck ich doch lieber nochmal nach :o<br />
Edit: Merkwürdig. Es gibt push_back und append... Vergiss, was ich gesagt habe und nimm den Vorschlag von CStoll.</p>
<p>Edit, ach es gab keinen Vorschlag von ihm <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>
<pre><code class="language-cpp">std::string s(gewuenschteAnzahl, 's');
</code></pre>
<p>Das dürfte wohl die kürzeste Lösung sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273704</guid><dc:creator><![CDATA[viande]]></dc:creator><pubDate>Thu, 26 Apr 2007 07:39:13 GMT</pubDate></item><item><title><![CDATA[Reply to String mit dynamischer Länge on Thu, 26 Apr 2007 07:33:41 GMT]]></title><description><![CDATA[<p>viande schrieb:</p>
<blockquote>
<p>Die bessere Lösung wäre ein std::string. Wie in einem anderen Thread hier gerade diskutiert wurde, hat string aber keine portable Möglichkeit, um etwas anzuhängen.</p>
</blockquote>
<p>hast du da noch den link? denn das kann ich nicht so ganz glauben... bei traten diesbezüglich noch gar keine probleme auf...</p>
<p><strong>edit:</strong> da war wohl einer schneller</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273706</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Thu, 26 Apr 2007 07:33:41 GMT</pubDate></item><item><title><![CDATA[Reply to String mit dynamischer Länge on Thu, 26 Apr 2007 07:40:19 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/8183">@Viande</a>:</p>
<p>und was ist mit insert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273708</guid><dc:creator><![CDATA[Paddy82]]></dc:creator><pubDate>Thu, 26 Apr 2007 07:40:19 GMT</pubDate></item><item><title><![CDATA[Reply to String mit dynamischer Länge on Thu, 26 Apr 2007 07:44:39 GMT]]></title><description><![CDATA[<p>Paddy82 schrieb:</p>
<blockquote>
<p>und was ist mit insert?</p>
</blockquote>
<p>Ja, das kann man auch nehmen <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>PS: in diesem Fall kannst du sogar mit assign() oder dem richtigen Ctor arbeiten, nur um die Liste zu vervollständigen:</p>
<pre><code class="language-cpp">string s(gewuenschteLaenge,'s');
</code></pre>
<p>(fällt dir noch eine kürzere Lösung ein?)</p>
<p>Edit <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/8183">@viande</a>: Von welcher Version des ANSI Standards reden wir hier? Ich hab' zwar kein offizielles Dokument hier, aber sowohl string::append() als auch string::push_back() gehören afaik zum Standard-Umfang von string.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273711</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 26 Apr 2007 07:44:39 GMT</pubDate></item><item><title><![CDATA[Reply to String mit dynamischer Länge on Thu, 26 Apr 2007 07:44:21 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<pre><code class="language-cpp">string s(gewuenschteLaenge,'s');
</code></pre>
<p>(fällt dir noch eine kürzere Lösung ein?)</p>
</blockquote>
<p>Nein...</p>
<p>Das mit push_back ist ja echt der Hammer...</p>
<p>Ich habe gerade mal im Standard nachgeschlagen, die push_back Methode ist nicht im string spezifiziert <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="😮"
    /></p>
<p>man lernt scheinbar nie aus...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273713</guid><dc:creator><![CDATA[Paddy82]]></dc:creator><pubDate>Thu, 26 Apr 2007 07:44:21 GMT</pubDate></item><item><title><![CDATA[Reply to String mit dynamischer Länge on Thu, 26 Apr 2007 07:55:54 GMT]]></title><description><![CDATA[<p>Sagt mal, haben alle einen anderen Standard als ich? :o</p>
<p>Bei mir steht ganz klar:</p>
<blockquote>
<p><strong>21.3.5 basic_string modifiers</strong><br />
basic_string&amp; append(size_type n, charT c);<br />
void push_back(charT);</p>
</blockquote>
<p>Und das append für strings, Iteratoren etc.</p>
<p>Edit: <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>:<br />
Wie gesagt, ich hab das ja auch gefunden, nur andere scheinbar nicht. Haben tu ich ISOIEC14882-1998 <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1273719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273719</guid><dc:creator><![CDATA[viande]]></dc:creator><pubDate>Thu, 26 Apr 2007 07:55:54 GMT</pubDate></item><item><title><![CDATA[Reply to String mit dynamischer Länge on Thu, 26 Apr 2007 07:58:29 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/8183">@viande</a>:</p>
<p>Heute ist irgendwie nicht mein Tag...<br />
Ich habe es überlesen...</p>
<p>PS: Ich habe den Standard von 2003 (ISO-IEC- 14882)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273726</guid><dc:creator><![CDATA[Paddy82]]></dc:creator><pubDate>Thu, 26 Apr 2007 07:58:29 GMT</pubDate></item></channel></rss>