<?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[Conversion from string literal to &#x27;char *&#x27; is deprecated]]></title><description><![CDATA[<p>Hallo liebes Forum,</p>
<p>bei folgendem Code tritt die Fehlermeldung</p>
<p>*<em>Conversion from string literal to 'char <em>' is deprecated</em></em> --&gt; Zeile 36</p>
<p>auf und ich weiß einfach nicht warum. Programmiert wird mit XCode.</p>
<p><strong>---------------------------------------------------------------------------</strong></p>
<p>#include &lt;iostream&gt;</p>
<p>class test<br />
{<br />
char *name;<br />
public:<br />
test(char *nam);<br />
void get_name();<br />
};</p>
<p>test::test(char *nam)<br />
{<br />
strcpy(name,nam);<br />
}</p>
<p>void test::get_name()<br />
{<br />
std::cout &lt;&lt; name;<br />
}</p>
<p>int main(int argc, const char * argv[])<br />
{</p>
<p>test eins(&quot;Test&quot;);<br />
eins.get_name();</p>
<p>}</p>
<p><strong>--------------------------------------------------------------------------------</strong></p>
<p>Wäre toll, wenn mir jemand helfen kann.<br />
Ich hab auch schon erlebt, dass manchmal (nicht bei diesem Beispiel) nicht kompiliert werden konnte,<br />
weil ein Problem vorlag. Nachdem ich xCode geschlossen und wieder geöffnet hatte, funktionierte der Code problemlos.</p>
<p>Beste Grüße &amp; noch ein frohes neues Jahr<br />
Fabian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/312377/conversion-from-string-literal-to-char-is-deprecated</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 20:35:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/312377.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Jan 2013 11:46:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Conversion from string literal to &#x27;char *&#x27; is deprecated on Thu, 03 Jan 2013 11:46:22 GMT]]></title><description><![CDATA[<p>Hallo liebes Forum,</p>
<p>bei folgendem Code tritt die Fehlermeldung</p>
<p>*<em>Conversion from string literal to 'char <em>' is deprecated</em></em> --&gt; Zeile 36</p>
<p>auf und ich weiß einfach nicht warum. Programmiert wird mit XCode.</p>
<p><strong>---------------------------------------------------------------------------</strong></p>
<p>#include &lt;iostream&gt;</p>
<p>class test<br />
{<br />
char *name;<br />
public:<br />
test(char *nam);<br />
void get_name();<br />
};</p>
<p>test::test(char *nam)<br />
{<br />
strcpy(name,nam);<br />
}</p>
<p>void test::get_name()<br />
{<br />
std::cout &lt;&lt; name;<br />
}</p>
<p>int main(int argc, const char * argv[])<br />
{</p>
<p>test eins(&quot;Test&quot;);<br />
eins.get_name();</p>
<p>}</p>
<p><strong>--------------------------------------------------------------------------------</strong></p>
<p>Wäre toll, wenn mir jemand helfen kann.<br />
Ich hab auch schon erlebt, dass manchmal (nicht bei diesem Beispiel) nicht kompiliert werden konnte,<br />
weil ein Problem vorlag. Nachdem ich xCode geschlossen und wieder geöffnet hatte, funktionierte der Code problemlos.</p>
<p>Beste Grüße &amp; noch ein frohes neues Jahr<br />
Fabian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285644</guid><dc:creator><![CDATA[F4b14n]]></dc:creator><pubDate>Thu, 03 Jan 2013 11:46:22 GMT</pubDate></item><item><title><![CDATA[Reply to Conversion from string literal to &#x27;char *&#x27; is deprecated on Thu, 03 Jan 2013 11:54:54 GMT]]></title><description><![CDATA[<p>Weisst du denn was ein String literal ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285647</guid><dc:creator><![CDATA[ScottZhang]]></dc:creator><pubDate>Thu, 03 Jan 2013 11:54:54 GMT</pubDate></item><item><title><![CDATA[Reply to Conversion from string literal to &#x27;char *&#x27; is deprecated on Thu, 03 Jan 2013 12:01:59 GMT]]></title><description><![CDATA[<p>Ein Stringliteral ist doch ein Objekt der Klasse String, welches die Zeichen zwischen den doppelten Anführungsstrichen enthält.</p>
<p>Edit:</p>
<p>Wenn ich schreibe</p>
<p>test::test(char *nam)<br />
{<br />
name = nam;<br />
}</p>
<p>Dann funktioniert es.</p>
<p>Verwende ich strcpy als nur, wenn ich in der test class z.b. char name[10] schreibe?<br />
Also bei zeichenbegrenzten Arrays?</p>
<p>name = nam funtioniert, weil es sich um ein Objekt (der Klasse String) handelt, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285649</guid><dc:creator><![CDATA[F4b14n]]></dc:creator><pubDate>Thu, 03 Jan 2013 12:01:59 GMT</pubDate></item><item><title><![CDATA[Reply to Conversion from string literal to &#x27;char *&#x27; is deprecated on Thu, 03 Jan 2013 12:05:56 GMT]]></title><description><![CDATA[<p>Die von dir angegebene Codezeile kann nicht das Problem sein. Vergleich doch mal die Typen von <code>name</code> und <code>nam</code></p>
<p>Und deine Definition von String literal ist falsch. Wie kommst du darauf? Ausserdem benutzt du doch garkeine Objekte vom Typ string. Schau nochmal in deinen Quellen nach!</p>
<p>Edit: <code>strcpy(name, nam)</code> ist auch nicht das selbe wie <code>name = nam</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285654</guid><dc:creator><![CDATA[ScottZhang]]></dc:creator><pubDate>Thu, 03 Jan 2013 12:05:56 GMT</pubDate></item><item><title><![CDATA[Reply to Conversion from string literal to &#x27;char *&#x27; is deprecated on Thu, 03 Jan 2013 12:06:40 GMT]]></title><description><![CDATA[<p>Hui, da sind so viele Fehler drin..<br />
1. In C++ mag man eher std::string, das ist eine Klasse für die die ganzen intuitiven Operatoren (=, +=, ==, ..) überladen sind, der kümmert sich auch gleich um Speicher etc.</p>
<p>2. Die Probleme mit deinem Code:<br />
- Ein String Literal (also alles zwischen &quot;&quot;) hat den Typ const char[N], wobei N die Anzahl der Zeichen im Literal + 1 (für die Nullterminierung '\0') ist.<br />
- Ein Array kann zu einem Pointer auf sein erstes Element zerfallen, deshalb geht folgendes:</p>
<pre><code>const char* s = &quot;Hallo!&quot;; // s zeigt jetzt auf H
</code></pre>
<p>Dank der Nullterminierung muss die Länge nicht separat gespeichert werden.<br />
Ich hoffe dir sind die kleinen &quot;const&quot; hier aufgefallen. Ein String Literal ist nämlich konstant (du darfst nicht rein schreiben). Das s oben ist z.B. vom Typ &quot;pointer to const char&quot;. Heißt, das hier würde einen Compilerfehler geben:</p>
<pre><code>s[0] = 'L';
</code></pre>
<p>Weil der Compiler durch den Typ weiß, dass man das nicht machen soll. Wenn du jetzt aber schreibst</p>
<pre><code>char* s = &quot;Hallo&quot;;
</code></pre>
<p>Dann kann dich der Compiler bei</p>
<pre><code>s[0] = 'L';
</code></pre>
<p>nicht mehr davor beschützen etwas Falsches zu machen. Daher ist diese implizite Konvertierung illegal.</p>
<p>Und du hast noch ein Problem: Bei deinem strcpy: name zeigt nicht auf einen gültigen Speicherbereich!</p>
<p>Und was ein get_name mit void als Rückgabetyp machen soll, musst du mir auch mal erklären.</p>
<blockquote>
<p>Ein Stringliteral ist doch ein Objekt der Klasse String, welches die Zeichen zwischen den doppelten Anführungsstrichen enthält.</p>
</blockquote>
<p>Ne. Stringliterale sind, wie oben beschrieben, einfach nur Arrays. Nix Klasse. <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/2285655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285655</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 03 Jan 2013 12:06:40 GMT</pubDate></item><item><title><![CDATA[Reply to Conversion from string literal to &#x27;char *&#x27; is deprecated on Thu, 03 Jan 2013 12:08:41 GMT]]></title><description><![CDATA[<p>ach cooky ... jetzt hast du wieder einfach alles verraten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285656</guid><dc:creator><![CDATA[ScottZhang]]></dc:creator><pubDate>Thu, 03 Jan 2013 12:08:41 GMT</pubDate></item><item><title><![CDATA[Reply to Conversion from string literal to &#x27;char *&#x27; is deprecated on Thu, 03 Jan 2013 22:21:41 GMT]]></title><description><![CDATA[<p>F4b14n schrieb:</p>
<blockquote>
<p>und ich weiß einfach nicht warum</p>
</blockquote>
<p>Sieht so aus, als hättest du nicht verstanden, was <code>char*</code> bedeutet. Tipp: Es ist kein Typ für String-Variablen. Ist ist ein Typ für Zeiger. Von Zeigern solltest du so lange wie möglich die Finger lassen. Und die Funktionen wie strcpy lässt du am besten ganz bleiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285941</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 03 Jan 2013 22:21:41 GMT</pubDate></item></channel></rss>