<?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[C-String in ein C-String einbetten (beliebige Position)]]></title><description><![CDATA[<p>Hi, ich habe die String Klasse nachgebaut (std::string) um den Umgang mit Zeiger, Arrays und überhaupt C++ zu lernen bzw. zu verstehen.</p>
<p>Ich habe dafür eine Klasse MString die, die gebräuchlichsten Methoden die man von eine String Klasse erwartet deklariert und definiert.</p>
<p>Nun stecke ich aber fest und zwar in der Methode</p>
<pre><code>insertChars(size_t pos, const MString&amp; ms)
</code></pre>
<p>. Die Aufgabe dieser Methode ist ein C-String in ein anderes zu stecken und zwar in eine beliebige Position.</p>
<p>Bsp:<br />
- C-String Nr.1 = &quot;Hallo&quot;<br />
- C-String Nr.2 = &quot;Baba&quot;<br />
- Position = 3 (Falls 0 soll am Anfang hinzugefügt werden)</p>
<p>Ergebnis: C-String = &quot;HalBabalo&quot;</p>
<p>- Position = 0</p>
<p>Ergebnis: C-String = &quot;BabaHallo&quot;</p>
<p>Dies ist die Aufgabe der oben genannte Methode.</p>
<p>Hier ist der Code-schnippet und die Erläuterung was jede Variable macht.</p>
<pre><code>void MString::insertChars(size_t pos, const MString&amp; ms) //Die Methode die, die oben genannte Aufgabe erledigen soll befindet sich in der Klasse MString
                                                            //Parameter Nr.1 - Der 2te String der sich in der Klasse MString befindet (Parameter Nr.2) wird in pos (Position) im 1ten String eingebettet
                                                            //Parameter Nr.2 - Ist ein Object der Klasse MString (Die hat ein anderen String) - Jedes Objekt besitzt ein anderen String
{
	if(pos &lt; len) //Wenn die Position die der User wählt kleiner als die Länge des Strings dann soll es fortfahren (logisch) - Es kann ja nicht sein dass der User die Position 15 wählt aber der String nur 6 Zeichen hat.
	{
		size_t gesamt = ms.len + len; //Hier zähle ich die Länge des 1tes Strings und des 2tes damit ich schon mal Speicherplatz reservieren kann.
		char* temp = new char[gesamt + 1]; //Hier wird der Speicherplatz mit new reserviert.

		for(size_t i = 0; i &lt; pos; i++)  //Hier beginnt der Algorithmus
			temp[i] = atPosition(i);

		for(size_t i = pos, j = 0; j &lt; ms.len , i &lt; ms.len + pos; j++, i++)
			temp[i] = ms.atPosition(j);

		for(size_t i = pos + ms.len, j = pos; j &lt; len, i &lt; ms.len + len; j++, i++)
			temp[i] = start[j]; //Hier endet der Algorithmus

		delete[] start; //Start ist ein Zeiger der Klasse MString (Der Zeiger zeigt auf den String der durch den Konstruktor übergeben wird -- Speicherplatz wird gelöscht
		start = temp;  //Hier die Zuweisung damit start wieder einen Wert hat und temp wird damit unbrauchbar (Ist ja nur eine &quot;Hilfsvariable&quot;)
	}
	else
	{
		cout &lt;&lt; &quot;Ungueltiger Wert&quot;;
	}
}
</code></pre>
<p>Mein Problem ist dass an der Stelle</p>
<pre><code>char* temp = new char[gesamt + 1];
</code></pre>
<p>nicht der gewünschte Speicherplatz reserviert wird sondern ein größerer. Bin mit dem Debugger durch und</p>
<pre><code>new char[gesamt + 1]
</code></pre>
<p>gesamt + 1 (In mein Beispiel) war 9. Doch es wird viel mehr reserviert und dies wird auch durch die Ausgabe bemerkbar.</p>
<p><a href="http://images.devs-on.net/Image/LvM9DfYfARFil3NY-Bereich.png" rel="nofollow">Konsole Screenshot</a></p>
<p><strong>Meine Frage ist, wieso wird mehr Speicherplatz als benötigt reserviert? Mach ich irgentwas falsch?</strong></p>
<p>Wenn mehr Informationen benötigt werden, einfach sagen.</p>
<p>Edit: Ich meinte Algorithmus, nicht Logarithmus <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>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/314703/c-string-in-ein-c-string-einbetten-beliebige-position</link><generator>RSS for Node</generator><lastBuildDate>Sat, 01 Aug 2026 06:00:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/314703.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 11 Mar 2013 14:27:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C-String in ein C-String einbetten (beliebige Position) on Mon, 11 Mar 2013 14:33:15 GMT]]></title><description><![CDATA[<p>Hi, ich habe die String Klasse nachgebaut (std::string) um den Umgang mit Zeiger, Arrays und überhaupt C++ zu lernen bzw. zu verstehen.</p>
<p>Ich habe dafür eine Klasse MString die, die gebräuchlichsten Methoden die man von eine String Klasse erwartet deklariert und definiert.</p>
<p>Nun stecke ich aber fest und zwar in der Methode</p>
<pre><code>insertChars(size_t pos, const MString&amp; ms)
</code></pre>
<p>. Die Aufgabe dieser Methode ist ein C-String in ein anderes zu stecken und zwar in eine beliebige Position.</p>
<p>Bsp:<br />
- C-String Nr.1 = &quot;Hallo&quot;<br />
- C-String Nr.2 = &quot;Baba&quot;<br />
- Position = 3 (Falls 0 soll am Anfang hinzugefügt werden)</p>
<p>Ergebnis: C-String = &quot;HalBabalo&quot;</p>
<p>- Position = 0</p>
<p>Ergebnis: C-String = &quot;BabaHallo&quot;</p>
<p>Dies ist die Aufgabe der oben genannte Methode.</p>
<p>Hier ist der Code-schnippet und die Erläuterung was jede Variable macht.</p>
<pre><code>void MString::insertChars(size_t pos, const MString&amp; ms) //Die Methode die, die oben genannte Aufgabe erledigen soll befindet sich in der Klasse MString
                                                            //Parameter Nr.1 - Der 2te String der sich in der Klasse MString befindet (Parameter Nr.2) wird in pos (Position) im 1ten String eingebettet
                                                            //Parameter Nr.2 - Ist ein Object der Klasse MString (Die hat ein anderen String) - Jedes Objekt besitzt ein anderen String
{
	if(pos &lt; len) //Wenn die Position die der User wählt kleiner als die Länge des Strings dann soll es fortfahren (logisch) - Es kann ja nicht sein dass der User die Position 15 wählt aber der String nur 6 Zeichen hat.
	{
		size_t gesamt = ms.len + len; //Hier zähle ich die Länge des 1tes Strings und des 2tes damit ich schon mal Speicherplatz reservieren kann.
		char* temp = new char[gesamt + 1]; //Hier wird der Speicherplatz mit new reserviert.

		for(size_t i = 0; i &lt; pos; i++)  //Hier beginnt der Algorithmus
			temp[i] = atPosition(i);

		for(size_t i = pos, j = 0; j &lt; ms.len , i &lt; ms.len + pos; j++, i++)
			temp[i] = ms.atPosition(j);

		for(size_t i = pos + ms.len, j = pos; j &lt; len, i &lt; ms.len + len; j++, i++)
			temp[i] = start[j]; //Hier endet der Algorithmus

		delete[] start; //Start ist ein Zeiger der Klasse MString (Der Zeiger zeigt auf den String der durch den Konstruktor übergeben wird -- Speicherplatz wird gelöscht
		start = temp;  //Hier die Zuweisung damit start wieder einen Wert hat und temp wird damit unbrauchbar (Ist ja nur eine &quot;Hilfsvariable&quot;)
	}
	else
	{
		cout &lt;&lt; &quot;Ungueltiger Wert&quot;;
	}
}
</code></pre>
<p>Mein Problem ist dass an der Stelle</p>
<pre><code>char* temp = new char[gesamt + 1];
</code></pre>
<p>nicht der gewünschte Speicherplatz reserviert wird sondern ein größerer. Bin mit dem Debugger durch und</p>
<pre><code>new char[gesamt + 1]
</code></pre>
<p>gesamt + 1 (In mein Beispiel) war 9. Doch es wird viel mehr reserviert und dies wird auch durch die Ausgabe bemerkbar.</p>
<p><a href="http://images.devs-on.net/Image/LvM9DfYfARFil3NY-Bereich.png" rel="nofollow">Konsole Screenshot</a></p>
<p><strong>Meine Frage ist, wieso wird mehr Speicherplatz als benötigt reserviert? Mach ich irgentwas falsch?</strong></p>
<p>Wenn mehr Informationen benötigt werden, einfach sagen.</p>
<p>Edit: Ich meinte Algorithmus, nicht Logarithmus <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>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2305796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2305796</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 11 Mar 2013 14:33:15 GMT</pubDate></item><item><title><![CDATA[Reply to C-String in ein C-String einbetten (beliebige Position) on Mon, 11 Mar 2013 14:32:40 GMT]]></title><description><![CDATA[<p>Zenter schrieb:</p>
<blockquote>
<p>Mein Problem ist dass an der Stelle</p>
<pre><code>char* temp = new char[gesamt + 1];
</code></pre>
<p>nicht der gewünschte Speicherplatz reserviert wird sondern ein größerer. Bin mit dem Debugger durch und</p>
<pre><code>new char[gesamt + 1]
</code></pre>
<p>gesamt + 1 (In mein Beispiel) war 9. Doch es wird viel mehr reserviert und dies wird auch durch die Ausgabe bemerkbar.</p>
</blockquote>
<p>Wie stellst du fest, dass mehr reserviert wurde? Dein Bild zeigt nur, dass ein '\0' fehlt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2305797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2305797</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 11 Mar 2013 14:32:40 GMT</pubDate></item><item><title><![CDATA[Reply to C-String in ein C-String einbetten (beliebige Position) on Mon, 11 Mar 2013 14:35:54 GMT]]></title><description><![CDATA[<p>Wenn du mit dem Debugger durchgegangen bist, wirst du sicherlich in der Zeile</p>
<pre><code>size_t gesamt = ms.len + len;
</code></pre>
<p>gesehen haben, wie gross ms.len und len letztlich waren. Und wenn dort irgendwo ein falscher Wert rauskam, hast du einen Fehler gefunden.<br />
Was manni sagt stimmt auch, da du die abschließende NULL nicht anhängst. Am Ende einfahc noch das hier reinschreiben:</p>
<pre><code>temp[gesamt] = 0;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2305799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2305799</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 11 Mar 2013 14:35:54 GMT</pubDate></item><item><title><![CDATA[Reply to C-String in ein C-String einbetten (beliebige Position) on Mon, 11 Mar 2013 14:36:22 GMT]]></title><description><![CDATA[<p>Hi manni,<br />
Mein Bild zeigt ja dass es soweit Funktioniert aber nach der gelungene einbettung kommen willkürliche Zeichen (Wie du sehen kannst) und ich denke mir diese bedeuten dass der reservierte Platz nicht belegt ist, nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2305800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2305800</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 11 Mar 2013 14:36:22 GMT</pubDate></item><item><title><![CDATA[Reply to C-String in ein C-String einbetten (beliebige Position) on Mon, 11 Mar 2013 14:42:19 GMT]]></title><description><![CDATA[<p>Zenter schrieb:</p>
<blockquote>
<p>denke mir diese bedeuten dass der reservierte Platz nicht belegt ist, nicht?</p>
</blockquote>
<p>Das bedeutet, das ein '\0' fehlt. Ob der Platz überhaupt allokiert wurde bzw. bis zu welchem Byte kann man daraus nicht ableiten. Deinem Text folgen halt Bytes mit irgendwelchen Bitmustern und das erste Byte mit '\0' beendet die Ausgabe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2305803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2305803</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 11 Mar 2013 14:42:19 GMT</pubDate></item><item><title><![CDATA[Reply to C-String in ein C-String einbetten (beliebige Position) on Mon, 11 Mar 2013 14:44:25 GMT]]></title><description><![CDATA[<p>Zuerst: Bitte schlag im Lexikon nach, was Logarithmus bedeutet! Sofort! (edit: Ok, hat sich wohl erledigt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /> )</p>
<p>Zu deinem Problem: Es wird nicht zu viel reserviert. Das Problem, das sich hier äußert ist, dass deine Längen nicht richtig passen. Anscheinend benutzt du deine Längenangabe bei der Ausgabe gar nicht, sondern gibst deine Daten aus, als wären sie nullterminerte char-Arrays (sogenannte C-Strings)<sup>*</sup>. Was sie aber nicht sind, da du dich nirgends um Nullterminierung kümmerst.</p>
<p>An dem Programm könnte man noch vieles auf sehr leichte weise verbessern, der gravierendste Punkt ist derzeit wohl die manuelle Speicherverwaltung. Diese sollte ganz dringend von einer Ressourcenhalterklasse (RAII Idiom) übernommen werden (vector, Smartpointer oder etwas selbstgeschriebenes mit gleicher Funktionalität). Derzeit bekommst du Speicherlöcher beim kleinsten Programmierfehler sowie bei fast jeder Form von Exception. Mit RAII <em>kann</em> dir das gar nicht mehr passieren und du musst doch sogar um <em>weniger</em> kümmern.</p>
<p><sup>*</sup>: Das ist zum Beispiel schlecht, da deine MStrings somit keine Nullzeichen enthalten können <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2305804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2305804</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 11 Mar 2013 14:44:25 GMT</pubDate></item><item><title><![CDATA[Reply to C-String in ein C-String einbetten (beliebige Position) on Mon, 11 Mar 2013 14:44:04 GMT]]></title><description><![CDATA[<p>Hi manni und Skymosho,</p>
<p>dies hat mein Problem gelöst, danke!</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2305805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2305805</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 11 Mar 2013 14:44:04 GMT</pubDate></item><item><title><![CDATA[Reply to C-String in ein C-String einbetten (beliebige Position) on Mon, 11 Mar 2013 14:52:09 GMT]]></title><description><![CDATA[<p>Hey Seppj,</p>
<p>danke für die viele Verbesserungsvorschlägen.</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Zuerst: Bitte schlag im Lexikon nach, was Logarithmus bedeutet! Sofort! (edit: Ok, hat sich wohl erledigt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /> )</p>
</blockquote>
<p>Ich weiß sehr wohl was Logarithmus bedeutet :), hatte es nur im Kopf .. doch ich meinte Algorithmus.</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>da du dich nirgends um Nullterminierung kümmerst.</p>
</blockquote>
<p>Das ist wahrscheinlich auch das Problem - ich werde die Klasse natürlich umgehend überarbeiten (Soweit funktioniert es aber ich muss sehen wo noch solche Schlüpflöcher sind).</p>
<p>Mit RAII hab ich noch garnichts gemacht aber sehr viel davon gehört, werde es mir aber ankucken und ggf. meine Klasse abändern.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2305807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2305807</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 11 Mar 2013 14:52:09 GMT</pubDate></item><item><title><![CDATA[Reply to C-String in ein C-String einbetten (beliebige Position) on Mon, 11 Mar 2013 15:06:54 GMT]]></title><description><![CDATA[<p>Besser als das Einführen einer Nullterminierung wäre, konsequent überall die Länge zu benutzen. Die speicherst du doch sowieso schon mit ab. Du darfst eben nirgendwo Funktionen aus dem Header cstring benutzen und bei der Ausgabe nicht einfach dein Datenfeld wie einen C-String ausgeben. Gib die Zeichen deiner Zeichenkette einzeln oder mit write aus. Auf jeden Fall muss auch hier die Länge berücksichtigt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2305813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2305813</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 11 Mar 2013 15:06:54 GMT</pubDate></item><item><title><![CDATA[Reply to C-String in ein C-String einbetten (beliebige Position) on Mon, 11 Mar 2013 15:19:40 GMT]]></title><description><![CDATA[<p>Hey, danke Seppj</p>
<p>eine Frage die mit meine erste nichts zu tun hat. Die Funktionen die in &lt;cstring&gt; bzw &lt;algorithm&gt; usw. schon bereitstehen sind auf die Perfomance bezogen bestens programmiert? D.h Ob sie alles raus holen, oder sind selber geschriebene (nicht von mir, da noch Fehler nicht ausgeschlossen werden) von erfahrene Programmierer besser geeignet?<br />
Damit will ich nicht sagen dass vllt Microsekunden damit gespart werden können sondern etwas mehr. Es könnte ja sein das solche Funktionen viele Umwege gehen um ans Ziel zu gelangen.</p>
<p>Die Frage dient nur zur Persönlichen Information bzw Interesse</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2305816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2305816</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 11 Mar 2013 15:19:40 GMT</pubDate></item><item><title><![CDATA[Reply to C-String in ein C-String einbetten (beliebige Position) on Mon, 11 Mar 2013 15:27:36 GMT]]></title><description><![CDATA[<p>Die &quot;Algorithmen&quot; aus algorithm sind letztlich normale Loops, die das machen was sie sollen.<br />
Wenn du auf den C++ Referenz-Seiten guckst wird oft eine kleine Beispiel-Implementierung angeboten, viel mehr ist das meist auch nicht. Normalerweise sind noch sowas wie Debuginformationen oder sowas dabei, damit man Fehler einfacher findet, aber das wars auch.</p>
<p>Die Komplexität, also etwa die Performance, ist durch den Standard vorgegeben. Aber das sind halt Komplexitätsklassen, die in der Realität nicht viel aussagen.</p>
<p>Und es gilt immer. Je mehr du über deine Daten und deine Probleme weist, desto besser kannst du optimieren. Aber desto spezieller ist diese Implementierung auch.</p>
<p>Die std::Algorithmen verlangen einige Operationen, die unterstützt werden müssen und dann arbeiten sie. Und das mit jeglichen Daten, die diese Operationen unterstützen.</p>
<p>Weist du nun mehr über ein Objekt (seien es Interna oder Implementierungen) kannst du darauf abzielend optimieren und kriegst so meistens ein bisschen besseren Speed raus. Aber das geht dann nur für diese Objekte und nicht für alles andere.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2305819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2305819</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 11 Mar 2013 15:27:36 GMT</pubDate></item><item><title><![CDATA[Reply to C-String in ein C-String einbetten (beliebige Position) on Mon, 11 Mar 2013 16:04:39 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Die &quot;Algorithmen&quot; aus algorithm sind letztlich normale Loops, die das machen was sie sollen.<br />
Wenn du auf den C++ Referenz-Seiten guckst wird oft eine kleine Beispiel-Implementierung angeboten, viel mehr ist das meist auch nicht. Normalerweise sind noch sowas wie Debuginformationen oder sowas dabei, damit man Fehler einfacher findet, aber das wars auch.</p>
</blockquote>
<p>Das ist nicht wahr. Zumindest beim GCC sind die so gut optimiert, wie es geht. copy wird zum Beispiel automatisch zu memmove (trivial kopierbare Objekte). Wenn das nicht geht, dann wird wenigstens die Schleife ggf. vom Optimierer entrollt (random access iteratoren) und erst wenn das auch nicht mehr geht, dann ist es eine naive Schleife. Außerdem werden parallele Algorithmen benutzt, sofern man den entsprechenden Compilerschalter umlegt. Das heißt man ist so schnell wie eine optimierte Funktion, aber dank Template-/Optimierermagie kann man immer copy benutzen, ohne sich Gedanken zu machen.</p>
<p>Ich vermute mal ganz stark, dass der andere große STL-Schreiber (Microsoft), das nicht großartig anders handhabt. Die Geschwindigkeit der STL-Implementierung ist eine wunderbare Möglichkeit zum Schwanzvergleich zwischen den verschiedenen Machern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2305823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2305823</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 11 Mar 2013 16:04:39 GMT</pubDate></item></channel></rss>