<?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 kopieren&#x2F;ersetzen mit eigener Funktion]]></title><description><![CDATA[<p>Folgendes Programm ist gegeben:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

void dstrcpy(char *s1, char *s2) {

  int i = 0;
  while(*s1 != '\0') {
    *s2++ = *s1++;
  }
}

int main() {
  char s1[] = &quot;123456789123456789123456789123456789&quot;;
  char s2[] = &quot;cdef&quot;;

  dstrcpy(s1, s2);

  return 0;
}
</code></pre>
<p>Nur leider tritt bei diesem Programm ein Speicherzugriffsfehler auf, da s2[] nicht die gleiche größe hat wie s1[]. Wie schaffe ich es nun diesen Fehler zu beheben?! Es darf natürlich nur etwas in der Funktion geändert werden.</p>
<p>Vielen Dank schon Mal für die Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/268276/string-kopieren-ersetzen-mit-eigener-funktion</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 21:18:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/268276.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 07 Jun 2010 02:51:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to String kopieren&#x2F;ersetzen mit eigener Funktion on Mon, 07 Jun 2010 02:51:35 GMT]]></title><description><![CDATA[<p>Folgendes Programm ist gegeben:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

void dstrcpy(char *s1, char *s2) {

  int i = 0;
  while(*s1 != '\0') {
    *s2++ = *s1++;
  }
}

int main() {
  char s1[] = &quot;123456789123456789123456789123456789&quot;;
  char s2[] = &quot;cdef&quot;;

  dstrcpy(s1, s2);

  return 0;
}
</code></pre>
<p>Nur leider tritt bei diesem Programm ein Speicherzugriffsfehler auf, da s2[] nicht die gleiche größe hat wie s1[]. Wie schaffe ich es nun diesen Fehler zu beheben?! Es darf natürlich nur etwas in der Funktion geändert werden.</p>
<p>Vielen Dank schon Mal für die Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908069</guid><dc:creator><![CDATA[Javun]]></dc:creator><pubDate>Mon, 07 Jun 2010 02:51:35 GMT</pubDate></item><item><title><![CDATA[Reply to String kopieren&#x2F;ersetzen mit eigener Funktion on Mon, 07 Jun 2010 03:08:34 GMT]]></title><description><![CDATA[<p>An der Größe der Strings kannst du ja nichts ändern, daher wäre eine Möglichkeit den Überlauf zu verhindern auf das Ende beider Strings zu prüfen und dann mit dem Kopieren aufzuhören.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908070</guid><dc:creator><![CDATA[iawhuhn]]></dc:creator><pubDate>Mon, 07 Jun 2010 03:08:34 GMT</pubDate></item><item><title><![CDATA[Reply to String kopieren&#x2F;ersetzen mit eigener Funktion on Mon, 07 Jun 2010 03:13:58 GMT]]></title><description><![CDATA[<p>iawhuhn schrieb:</p>
<blockquote>
<p>An der Größe der Strings kannst du ja nichts ändern, daher wäre eine Möglichkeit den Überlauf zu verhindern auf das Ende beider Strings zu prüfen und dann mit dem Kopieren aufzuhören.</p>
</blockquote>
<p>Dann wäre die gewünschte Funktion aber nicht mehr gegeben. Problemstellung sieht ja so aus, dass s2 nur 4bit groß ist, aber nun durch einen 36bit langen string ersetzt werden soll. Das funktioniert auch soweit, das einzige Problem ist, dass dabei s1 beschädigt wird. Es wird aufgrund des Speicherüberlaufs überschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908071</guid><dc:creator><![CDATA[Javun]]></dc:creator><pubDate>Mon, 07 Jun 2010 03:13:58 GMT</pubDate></item><item><title><![CDATA[Reply to String kopieren&#x2F;ersetzen mit eigener Funktion on Mon, 07 Jun 2010 03:31:25 GMT]]></title><description><![CDATA[<p>Es gibt keinen Weg die Größe der angelegten Arrays s1 und s2 aus der main() zu ändern, also während der Laufzeit z.B. mehr Speicher für s1 oder s2 bereitzustellen.</p>
<p>Du hast somit auch keine Möglichkeit ein größeres Array vollständig in ein kleineres zu kopieren. Das ist unmöglich. Den Überlauf verhinderst du nur damit rechtzeitig mit dem Kopieren aufzuhören.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908072</guid><dc:creator><![CDATA[iawhuhn]]></dc:creator><pubDate>Mon, 07 Jun 2010 03:31:25 GMT</pubDate></item><item><title><![CDATA[Reply to String kopieren&#x2F;ersetzen mit eigener Funktion on Mon, 07 Jun 2010 06:43:32 GMT]]></title><description><![CDATA[<p><em>Irgendetwas</em> wirst Du am Programm ändern müssen - seine Implementierung oder seine gewünschte Funktion, denn die beiden passen einfach nicht zueinander.<br />
wie wäre es mit Folgendem:</p>
<pre><code class="language-cpp">...
int main() {
  char s1[] = &quot;123456789123456789123456789123456789&quot;;
  char s2[sizeof(s1)] = &quot;cdef&quot;;

...
</code></pre>
<p>?</p>
<p>Noch besser: std::string nutzen und sich mit wirklich Interessantem beschäftigen. <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ß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908114</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 07 Jun 2010 06:43:32 GMT</pubDate></item><item><title><![CDATA[Reply to String kopieren&#x2F;ersetzen mit eigener Funktion on Mon, 07 Jun 2010 07:11:07 GMT]]></title><description><![CDATA[<p>Abgesehen davon, dass ich s1 und s2 vertauschen würde, dann die Parameter vernünftig bennenen würde und source const sein sollte,<br />
leistet die (C-)Funktion das, was ich von ihr erwarten würde.<br />
Da muss sich in C halt der Aufrufer drum kümmern, das genug Platz im String vorhanden ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908126</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Mon, 07 Jun 2010 07:11:07 GMT</pubDate></item><item><title><![CDATA[Reply to String kopieren&#x2F;ersetzen mit eigener Funktion on Mon, 07 Jun 2010 08:42:31 GMT]]></title><description><![CDATA[<p>Javun schrieb:</p>
<blockquote>
<p>Nur leider tritt bei diesem Programm ein Speicherzugriffsfehler auf, da s2[] nicht die gleiche größe hat wie s1[].</p>
</blockquote>
<p>Genauer:<br />
s1 ist vom Typ <code>char[37]</code><br />
s2 ist vom Typ <code>char[5]</code><br />
Dass Du hier <code>char[]</code> schreiben kannst, liegt an Initialisierungs-Sonderregeln. Der Compiler vervollständigt den Typ zu <code>char[37]</code> bzw <code>char[5]</code> indem er zählt, wieviele Zeichen Deine Initialisierer haben.</p>
<p>Javun schrieb:</p>
<blockquote>
<p>Wie schaffe ich es nun diesen Fehler zu beheben?!<br />
Es darf natürlich nur etwas in der Funktion geändert werden.</p>
</blockquote>
<p>Ganz einfach:</p>
<pre><code class="language-cpp">void dstrcpy(char *s1, char *s2)
{
}
</code></pre>
<p>Problem behoben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Du hast nicht gesagt, was dstrcpy eigentlich machen soll. Da man die Größe von solchen Arrays wie s1 und s2 nicht nachträglich ändern kann, kann ich mir auch nicht zusammenreimen, was ein &quot;korrektes&quot; dstrcpy hier eigentlich machen soll.</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908180</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 07 Jun 2010 08:42:31 GMT</pubDate></item><item><title><![CDATA[Reply to String kopieren&#x2F;ersetzen mit eigener Funktion on Mon, 07 Jun 2010 09:34:51 GMT]]></title><description><![CDATA[<p>Es geht bei dieser Funktion einfach darum einen beliebig langen String in einen beliebigen kurzen zu kopieren. An der main() soll daher auch nichts geändert werden.<br />
Die Funktion dstrcpy muss so angepasst werden, dass es den Kopiervorgang erfolgreich abschließt. Möglich ist dies aufjedenfall, da mir diese Aufgabe in der Uni gestellt wurde und die Lösung auch eigentlich recht simpel sein soll. Nur leider komme ich nicht darauf...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908204</guid><dc:creator><![CDATA[Javun]]></dc:creator><pubDate>Mon, 07 Jun 2010 09:34:51 GMT</pubDate></item><item><title><![CDATA[Reply to String kopieren&#x2F;ersetzen mit eigener Funktion on Mon, 07 Jun 2010 09:45:10 GMT]]></title><description><![CDATA[<p>Javun schrieb:</p>
<blockquote>
<p>Es geht bei dieser Funktion einfach darum einen beliebig langen String in einen beliebigen kurzen zu kopieren.</p>
</blockquote>
<p>Sofern du mit dynamischen Strings arbeitest (wie std::string) ist dies auch möglich, nicht aber mit statischen C-Arrays deren Größe du schlicht und ergreifend nicht mehr zur Laufzeit ändern kannst. Das ist auch völlig unabhängig davon wie die Aufgabenstellung ist, es ist schlicht und ergreifend nicht möglich.</p>
<p>Eine andere Alternative ist es, wenn diese Arrays dynamisch alloziert werden (Sprich Zeiger und new[]/delete[] bzw. falls das eine C-Frage und nicht C++ per malloc/free), und du den Speicherbereich des kleineren löschst und entsprechend neu allozierst.</p>
<p>Javun schrieb:</p>
<blockquote>
<p>An der main() soll daher auch nichts geändert werden.</p>
</blockquote>
<p>Dann ist die Lösung nicht möglich. Ich gehe dann eher davon aus das der Inhalt des kleinen Arrays in das große Array übertragen werden soll. Oder: das nur der Teil kopiert werden soll, der in das Zielarray wirklich hinein passt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908209</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 07 Jun 2010 09:45:10 GMT</pubDate></item><item><title><![CDATA[Reply to String kopieren&#x2F;ersetzen mit eigener Funktion on Mon, 07 Jun 2010 09:48:08 GMT]]></title><description><![CDATA[<p>genaue aufgabenstellung?<br />
(copy &amp; paste bitte)</p>
<p>dann gibts auch ne einfache antwort ;o)</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908211</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 07 Jun 2010 09:48:08 GMT</pubDate></item><item><title><![CDATA[Reply to String kopieren&#x2F;ersetzen mit eigener Funktion on Mon, 07 Jun 2010 09:57:43 GMT]]></title><description><![CDATA[<p>Javun schrieb:</p>
<blockquote>
<p>Möglich ist dies aufjedenfall</p>
</blockquote>
<p>nö. nicht mit den von dir dargestellten rahmenbedingungen.</p>
<p>die einfachste lösung heisst jedenfalls &quot;std::string verwenden&quot;.</p>
<p>ru,<br />
cirion</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908217</guid><dc:creator><![CDATA[cirion]]></dc:creator><pubDate>Mon, 07 Jun 2010 09:57:43 GMT</pubDate></item><item><title><![CDATA[Reply to String kopieren&#x2F;ersetzen mit eigener Funktion on Mon, 07 Jun 2010 09:59:40 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void dstrcpy(char const* s1, char* s2) {
  int i = 0;
  while (*s1 != '\0' &amp;&amp; *s2 != '\0')
    *s2++ = *s1++;
}
</code></pre>
<p>Kopiere solang bis entweder s1 oder s2 &quot;zu Ende&quot; ist. D.h. für Dein Beispiel das es nur die ersten 4 Zeichen von s1 nach s2 kopiert und gut ist. Funktioniert btw. auch nur solang die Strings null-terminiert sind (bei konstant-langen Strings wie in Deinem Beispiel durch den Compiler gegeben, bei dynamisch alloziierten Strings muss man dies selber tun).</p>
<p>Gut Schuß<br />
VuuRWerK <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/1908218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908218</guid><dc:creator><![CDATA[VuuRWerK]]></dc:creator><pubDate>Mon, 07 Jun 2010 09:59:40 GMT</pubDate></item><item><title><![CDATA[Reply to String kopieren&#x2F;ersetzen mit eigener Funktion on Mon, 07 Jun 2010 11:40:40 GMT]]></title><description><![CDATA[<p>Javun schrieb:</p>
<blockquote>
<p>Es geht bei dieser Funktion einfach darum einen beliebig langen String in einen beliebigen kurzen zu kopieren. ...</p>
</blockquote>
<p>garantiert nicht.</p>
<p>Machen wir das einfach mal ganz ohne Programmiersprache:<br />
&quot;Schaufele einen Kubikmeter Sand in eine 1-Literflasche&quot; ist das Äquivalent zu Deiner Aufgabe.</p>
<p>Ich vermute, dass<br />
a) die Lösung von VuuRWerK das Gewünschte ist oder<br />
b) die Anlage eines neuen Arrays (z.B. mit <code>new</code> )<br />
gemeint ist.<br />
So wie Du die Aufgabe beschrieben hast, ist sie nicht lösbar.<br />
Vermutlich hast Du die Vorgabe &quot;... mit beliebig langen Strings ...&quot; mißverstanden (gemeint: &quot;Die Funktion soll keine feste Stringlänge voraussetzen&quot;; verstanden: &quot;Die Funktion soll mit jeder Stringlänge alles kopieren&quot;).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908282</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 07 Jun 2010 11:40:40 GMT</pubDate></item><item><title><![CDATA[Reply to String kopieren&#x2F;ersetzen mit eigener Funktion on Mon, 07 Jun 2010 11:41:44 GMT]]></title><description><![CDATA[<p>Javun schrieb:</p>
<blockquote>
<p>Es geht bei dieser Funktion einfach darum einen beliebig langen String in einen beliebigen kurzen zu kopieren.</p>
</blockquote>
<p>Bestimmt nicht.</p>
<p>Sicher, dass Du Quelle und Ziel nicht verwechselt hast?</p>
<p>Hat das d in dstrcpy noch eine besondere Bedeutung?</p>
<p>Bei der Standard-C-String-Funktion (strcpy) kommt der Ziel-Parameter auch <code>vor</code> dem Quell-Parameter.</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908284</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 07 Jun 2010 11:41:44 GMT</pubDate></item></channel></rss>