<?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[Funktion die einen String zerlegt!]]></title><description><![CDATA[<p>Hallo Leute,<br />
ich habe eine Funktion geschrieben, die einen String zerlegt.<br />
Ich stelle Mich gerade zu doof an es genau zu erklären, ich kopiere sie mal hier hinein:</p>
<pre><code class="language-cpp">char *parts (char *s1, int b, int l)
char *parts (char *s1, int b, int l)
{
  int i;

  for(i=0; i != b; i++)
    {*s1++;};

  if (l &gt; 0)
    {
      char *pBuffer = new char[l];

      for(i=0; i != l &amp;&amp; *s1; i++)
        {pBuffer[i] = *s1++;};
      return pBuffer;
    }

  return s1;
}
</code></pre>
<p>Die Funktion tut genau das, was sie tun soll.<br />
Aber wie gebe ich jetzt den Speicher von pBuffer wieder frei?<br />
Hoffe ihr könnt mir helfen <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>Gruß Light-Guard</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/120714/funktion-die-einen-string-zerlegt</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 12:21:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/120714.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 15 Sep 2005 16:24:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktion die einen String zerlegt! on Thu, 15 Sep 2005 16:24:47 GMT]]></title><description><![CDATA[<p>Hallo Leute,<br />
ich habe eine Funktion geschrieben, die einen String zerlegt.<br />
Ich stelle Mich gerade zu doof an es genau zu erklären, ich kopiere sie mal hier hinein:</p>
<pre><code class="language-cpp">char *parts (char *s1, int b, int l)
char *parts (char *s1, int b, int l)
{
  int i;

  for(i=0; i != b; i++)
    {*s1++;};

  if (l &gt; 0)
    {
      char *pBuffer = new char[l];

      for(i=0; i != l &amp;&amp; *s1; i++)
        {pBuffer[i] = *s1++;};
      return pBuffer;
    }

  return s1;
}
</code></pre>
<p>Die Funktion tut genau das, was sie tun soll.<br />
Aber wie gebe ich jetzt den Speicher von pBuffer wieder frei?<br />
Hoffe ihr könnt mir helfen <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>Gruß Light-Guard</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873022</guid><dc:creator><![CDATA[Light-Guard]]></dc:creator><pubDate>Thu, 15 Sep 2005 16:24:47 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion die einen String zerlegt! on Thu, 15 Sep 2005 16:27:05 GMT]]></title><description><![CDATA[<p>Na mit delete[] pBuffer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873024</guid><dc:creator><![CDATA[User---]]></dc:creator><pubDate>Thu, 15 Sep 2005 16:27:05 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion die einen String zerlegt! on Thu, 15 Sep 2005 16:49:26 GMT]]></title><description><![CDATA[<p>Hmmm was soll new char[1] hier?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873035</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Thu, 15 Sep 2005 16:49:26 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion die einen String zerlegt! on Thu, 15 Sep 2005 17:10:02 GMT]]></title><description><![CDATA[<p>Lies genau, es heisst new char[l].</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873052</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Thu, 15 Sep 2005 17:10:02 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion die einen String zerlegt! on Thu, 15 Sep 2005 17:10:41 GMT]]></title><description><![CDATA[<p>Vor allem kennt C kein new/delete, also doch malloc()/free().</p>
<p>Prinzipiell: Wenn Speicher in einer Funktion reeserviert wird und dieser nach Verlassen der Funktion noch gebraucht wird, dann muss der Caller halt den Speicher freigeben.<br />
Besser ist es imho aber, der Funktion bereits reservierten Speicher zu übergeben.</p>
<p>Ausserdem ist die Funktion (wenn ich sie denn richtig verstehe) arg umständlich geschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873053</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 15 Sep 2005 17:10:41 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion die einen String zerlegt! on Fri, 16 Sep 2005 06:15:44 GMT]]></title><description><![CDATA[<p>Also Sinn der Funktion ist es aus einem String einen teil hinaus zu schneiden und aus zu geben.</p>
<p>Der Zeiger <strong>s1</strong> Zeigt auf den String.<br />
Die Variable <strong>b</strong> gibt an, ab welchem Zeichen angefangen werden soll.<br />
Die Variable <strong>l</strong> gibt an, wie weit gelesen werden soll.</p>
<p>parts (&quot;<a href="http://www.c-plusplus.net" rel="nofollow">www.c-plusplus.net</a>&quot;,4,6) würde also &quot;c-plus&quot; ergeben.</p>
<p>Die Funktion funktioniert also so ähnlich wie der substr Befehl aus der string.h<br />
Entschuldigt bitte meine umständliche art zu erklären ^^</p>
<p>Das Problem ist jetzt bloß, das ich nicht weiß wie ich jetzt einen char array mit variabler größe erstelle der nach dem Aufruf der Fuktion wieder frei gegeben wird.<br />
Oder fällt euch eine bessere lösung für diese Funktion ein?</p>
<p>Gruß Light-Guard</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873342</guid><dc:creator><![CDATA[Light-Guard]]></dc:creator><pubDate>Fri, 16 Sep 2005 06:15:44 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion die einen String zerlegt! on Fri, 16 Sep 2005 06:35:28 GMT]]></title><description><![CDATA[<p>Also ich habe nochmal etwas anderes versucht :</p>
<pre><code class="language-cpp">char *pBuffer = new char[l];
</code></pre>
<p>wurde ersetzt durch</p>
<pre><code class="language-cpp">char *pBuffer = &quot;&quot;;
</code></pre>
<p>Jetzt müßte der Speicher doch wieder Freigegeben werden wenn die Funktion verlassen wird oder?</p>
<p>Gruß Light-Guard</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873358</guid><dc:creator><![CDATA[Light-Guard]]></dc:creator><pubDate>Fri, 16 Sep 2005 06:35:28 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion die einen String zerlegt! on Fri, 16 Sep 2005 06:50:06 GMT]]></title><description><![CDATA[<p>Light-Guard schrieb:</p>
<blockquote>
<pre><code class="language-cpp">char *pBuffer = &quot;&quot;;
</code></pre>
<p>Jetzt müßte der Speicher doch wieder Freigegeben werden wenn die Funktion verlassen wird oder?</p>
<p>Gruß Light-Guard</p>
</blockquote>
<p>Dadurch zeigst du mit deinem Zeiger auf einen Speicher, der nicht beschrieben werden darf.</p>
<p>Eigentlich wurde dir aber eh schon erklärt, was du machen musst. Wenn du new verwendest, dann gehört am Ende deiner Funktion bzw. dann wenn du sie verlässt noch ein delete gemacht:</p>
<pre><code class="language-cpp">char *text = new char[10];
...
delete text;

return;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/873370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873370</guid><dc:creator><![CDATA[AJ]]></dc:creator><pubDate>Fri, 16 Sep 2005 06:50:06 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion die einen String zerlegt! on Fri, 16 Sep 2005 08:05:08 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;stdio.h&gt;

char* parts( char* lpszString, int nStart, int nCount, char* lpszBuffer )
{
	if( !lpszString )
		return 0;

	int i = 0;

	for( ; i &lt; nCount; ++i )
		lpszBuffer[i] = lpszString[nStart+i];

	lpszBuffer[i] = '\0';
	return lpszBuffer;
}

int main()
{
	char* lpszString = &quot;Mein toller Schtring&quot;;
	char szBuf[30];
	printf( &quot;%s&quot;, parts( lpszString, 5, 4, szBuf ));

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/873383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873383</guid><dc:creator><![CDATA[Airdamn]]></dc:creator><pubDate>Fri, 16 Sep 2005 08:05:08 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion die einen String zerlegt! on Fri, 16 Sep 2005 12:51:04 GMT]]></title><description><![CDATA[<p>Light-Guard schrieb:</p>
<blockquote>
<p>AJ schrieb:</p>
<blockquote>
<p>Eigentlich wurde dir aber eh schon erklärt, was du machen musst. Wenn du new verwendest, dann gehört am Ende deiner Funktion bzw. dann wenn du sie verlässt noch ein delete gemacht:</p>
<pre><code class="language-cpp">char *text = new char[10];
...
delete text;

return;
</code></pre>
</blockquote>
<p>Fast.</p>
<pre><code class="language-cpp">char *text = new char[10];
...
delete[] text;
</code></pre>
</blockquote>
<p>Bin aus der Übung; Außerdem ist das Pseudo-Code :p</p>
<blockquote>
<p>Gehört aber wie schon erwähnt nach C++.</p>
</blockquote>
<p>Richtig, da hin wollte ich es eigentlich schon längst verschieben, aber jetzt hol ich es endlich nach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873620</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Fri, 16 Sep 2005 12:51:04 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion die einen String zerlegt! on Fri, 16 Sep 2005 12:51:19 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=2739" rel="nofollow">AJ</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=10" rel="nofollow">ANSI C</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/873673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873673</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Fri, 16 Sep 2005 12:51:19 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion die einen String zerlegt! on Fri, 16 Sep 2005 22:43:18 GMT]]></title><description><![CDATA[<p>Hey AJ, was hast du denn mit meinem Post gemacht? Der ist ja vollkommen degeneriert. Und wo ist die Funktion abgeblieben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/874094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/874094</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Fri, 16 Sep 2005 22:43:18 GMT</pubDate></item></channel></rss>