<?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 als parameter übergeben und bearbeiten]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgenden code :</p>
<pre><code>void foo (char *&amp; str)
{
   std::string str2(str);
   //mit str2 arbeite ich jetzt weiter...
   //...
   //jetzt soll str2 nach str kopiert werden

   //1:
   memcpy(str, str2.c_str(), str2.length()+1); //access violation

   //2:
   strcpy_s(str, str2.length()+1, str2.c_str()); //access violation

   //3:
   for(unsigned int i = 0; i &lt; str2.length()+1; ++i) 
   {
      str[i] = str2.c_str()[i]; //access violation
   }
}
</code></pre>
<p>//so in der art wird die funktion aufgerufen</p>
<pre><code>int main()
{
   char * test = &quot;test&quot;;
   foo(test);
   cout &lt;&lt; &quot;test : &quot; &lt;&lt; test &lt;&lt; endl;

   return 0;
]
</code></pre>
<p>Ich verstehe einfach nicht warum das nicht geht. Ich übergebe den c string doch als referenz!</p>
<p>Vielen Dank im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/330296/c-string-als-parameter-übergeben-und-bearbeiten</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 11:35:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/330296.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 02 Jan 2015 05:00:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to c-string als parameter übergeben und bearbeiten on Fri, 02 Jan 2015 05:00:57 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgenden code :</p>
<pre><code>void foo (char *&amp; str)
{
   std::string str2(str);
   //mit str2 arbeite ich jetzt weiter...
   //...
   //jetzt soll str2 nach str kopiert werden

   //1:
   memcpy(str, str2.c_str(), str2.length()+1); //access violation

   //2:
   strcpy_s(str, str2.length()+1, str2.c_str()); //access violation

   //3:
   for(unsigned int i = 0; i &lt; str2.length()+1; ++i) 
   {
      str[i] = str2.c_str()[i]; //access violation
   }
}
</code></pre>
<p>//so in der art wird die funktion aufgerufen</p>
<pre><code>int main()
{
   char * test = &quot;test&quot;;
   foo(test);
   cout &lt;&lt; &quot;test : &quot; &lt;&lt; test &lt;&lt; endl;

   return 0;
]
</code></pre>
<p>Ich verstehe einfach nicht warum das nicht geht. Ich übergebe den c string doch als referenz!</p>
<p>Vielen Dank im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435727</guid><dc:creator><![CDATA[Ceno]]></dc:creator><pubDate>Fri, 02 Jan 2015 05:00:57 GMT</pubDate></item><item><title><![CDATA[Reply to c-string als parameter übergeben und bearbeiten on Fri, 02 Jan 2015 06:23:24 GMT]]></title><description><![CDATA[<p>Aktiviere mal Warnungen deines Compilers.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435728</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 02 Jan 2015 06:23:24 GMT</pubDate></item><item><title><![CDATA[Reply to c-string als parameter übergeben und bearbeiten on Fri, 02 Jan 2015 06:30:50 GMT]]></title><description><![CDATA[<p>So weit ich weiß sind String-Literale nur lesbar, aber du willst in diesen Speicherbereich schreiben.</p>
<p>Wie hast du solchen Code durch den Compiler geprügelt bekommen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435729</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 02 Jan 2015 06:30:50 GMT</pubDate></item><item><title><![CDATA[Reply to c-string als parameter übergeben und bearbeiten on Fri, 02 Jan 2015 06:47:24 GMT]]></title><description><![CDATA[<p>Logn schrieb:</p>
<blockquote>
<p>Wie hast du solchen Code durch den Compiler geprügelt bekommen?</p>
</blockquote>
<p>Stringliterale sind in C nicht const-qualifiziert<sup>*</sup>. Aber es ist undefiniertes Verhalten (in der Praxis normalerweise ein Absturz), wenn man trotzdem versucht sie zu ändern. Fieses Relikt aus alten Zeiten <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><sup>*</sup>: Und in C++, was der Threadersteller anscheinend (unabsichtlich?) benutzt, ist die Zuweisung in Zeile 3 der main ebenfalls erlaubt (aber deprecated) aus Kompatibilitätsgründen zu C.<br />
@Threadersteller: Dir ist schon klar, dass du da ein paar C++-Features nutzt? Dass man aber andererseits in &quot;richtigem&quot; C++ nicht so wie in C mit Zeichenketten umgeht? Benutz einen C-Compiler für deinen C-Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435730</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 02 Jan 2015 06:47:24 GMT</pubDate></item><item><title><![CDATA[Reply to c-string als parameter übergeben und bearbeiten on Fri, 02 Jan 2015 09:26:17 GMT]]></title><description><![CDATA[<p>Du kannst <em>test</em> als Array definieren.</p>
<pre><code>char test[] = &quot;test&quot;;
</code></pre>
<p>^zumindest in C. Wie das Verhalten dann mit dem C++ foo ist, weiß ich nicht.^</p>
<p>Noch etwas anderes:</p>
<p>Was meinst du, wieviel Platz du in <em>str</em> (in <em>foo</em>)hast?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435747</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Fri, 02 Jan 2015 09:26:17 GMT</pubDate></item><item><title><![CDATA[Reply to c-string als parameter übergeben und bearbeiten on Fri, 02 Jan 2015 14:24:28 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/29873">@Nathan</a><br />
Natürlich habe ich die Warnung aktiviert, aber es gab keine.</p>
<p>@Logn<br />
Der Code kompiliert reibungslos in VS13 Express</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a> Ich habe meine Frage ausversehen in das C Forum gepostet <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="🙄"
    /> , wäre nett wenn es jemand verschieben könnte nach C++. Das Problem ist das ich an einem größeren Code arbeite welcher auch überwiegend aus C-strings besteht.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/32185">@DirkB</a><br />
Der string wird durch die Funktion entweder kleiner oder bleibt gleich (von der Länge her).</p>
<p>Habe das Problem jetzt gelöst indem ich ein bisschen mit C++ std::strings gearbeitet habe und der member funktion c_str().</p>
<p>Danke für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435763</guid><dc:creator><![CDATA[Ceno]]></dc:creator><pubDate>Fri, 02 Jan 2015 14:24:28 GMT</pubDate></item><item><title><![CDATA[Reply to c-string als parameter übergeben und bearbeiten on Fri, 02 Jan 2015 14:59:37 GMT]]></title><description><![CDATA[<p>Ceno schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/29873">@Nathan</a><br />
Natürlich habe ich die Warnung aktiviert, aber es gab keine.</p>
</blockquote>
<p>Welchen Compiler verwendest du?<br />
GCC schmeißt ohne irgendwelchen speziellen Warnungsoptionen:</p>
<pre><code>warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
     char * test = &quot;test&quot;;
</code></pre>
<p>Edit: Ah, wegen strcpy_s vermutlich MSVC. Der gibt da glaube ich wirklich keine Warnung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435767</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 02 Jan 2015 14:59:37 GMT</pubDate></item><item><title><![CDATA[Reply to c-string als parameter übergeben und bearbeiten on Fri, 02 Jan 2015 15:01:17 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Ceno schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/29873">@Nathan</a><br />
Natürlich habe ich die Warnung aktiviert, aber es gab keine.</p>
</blockquote>
<p>Welchen Compiler verwendest du?<br />
GCC schmeißt ohne irgendwelchen speziellen Warnungsoptionen:</p>
<pre><code>warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
     char * test = &quot;test&quot;;
</code></pre>
</blockquote>
<p>Hatte ich auch schon bei meinem vorigen Kommentar erwähnt : Visual Studio 2013 Express.</p>
<p>Ja stimmt wenn man nur strcpy benutzt bekommt man eine warnung, mit _s aber nicht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435768</guid><dc:creator><![CDATA[Ceno]]></dc:creator><pubDate>Fri, 02 Jan 2015 15:01:17 GMT</pubDate></item><item><title><![CDATA[Reply to c-string als parameter übergeben und bearbeiten on Fri, 02 Jan 2015 15:57:52 GMT]]></title><description><![CDATA[<p>Ceno schrieb:</p>
<blockquote>
<p>Ja stimmt wenn man nur strcpy benutzt bekommt man eine warnung, mit _s aber nicht!</p>
</blockquote>
<p>Die _s Versionen gibt es aber nicht auf anderen Implementierungen der Standardbibliothek. Die bessere Variante ist imo die normalen zu verwenden und diese Warnung zu dekativieren, so bleibt der Code portabel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435772</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 02 Jan 2015 15:57:52 GMT</pubDate></item><item><title><![CDATA[Reply to c-string als parameter übergeben und bearbeiten on Fri, 02 Jan 2015 16:56:22 GMT]]></title><description><![CDATA[<p>Da du die Sicherheit, die dir strcpy_s bieten soll, hier sowieso umgehst (indem du die Länge der Quelle angibst) bringt es dir auch keinen Vorteil.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435785</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Fri, 02 Jan 2015 16:56:22 GMT</pubDate></item><item><title><![CDATA[Reply to c-string als parameter übergeben und bearbeiten on Fri, 02 Jan 2015 20:15:20 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/u109509" rel="nofollow">SeppJ</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/f10" rel="nofollow">C (alle ISO-Standards)</a> in das Forum <a href="http://www.c-plusplus.net/forum/f15" rel="nofollow">C++ (alle ISO-Standards)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/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/2435817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435817</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Fri, 02 Jan 2015 20:15:20 GMT</pubDate></item></channel></rss>