<?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[warning: deprecated conversion from string constant to &#x27;char*&#x27;]]></title><description><![CDATA[<p>Hallo C++ Forum,</p>
<p>Ich habe eine C++-Programm welches C-bibliotheken aufruft.<br />
In meinem code habe ich an einigen stellen sowas stehen:</p>
<pre><code class="language-cpp">char      *side   = &quot;L&quot;;
</code></pre>
<p>Der Compiler gibt mir an jeder stelle obiges warning aus.<br />
Ich wollte jetzt durch nachlesn aus jedem dieser zuweisungen sowas machen:</p>
<pre><code class="language-cpp">const char * side = &quot;L&quot;;
</code></pre>
<p>Das geht aber nicht da:<br />
[code]<br />
invalid conversion from 'const char*' to 'char*'<br />
[code]</p>
<p>Ich weiß dass man evtl. std::string benutzen sollte...allerdings brauche ich doch für die C-Bibs dann char* arrays.</p>
<p>Wie kann ich das warning beseiteigen oder welche const-variante wäre hier sauer?<br />
Warum beschwert sich der compiler mit dem warning?</p>
<p>Danke euch.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/248495/warning-deprecated-conversion-from-string-constant-to-char</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 00:36:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/248495.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 25 Aug 2009 18:03:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to warning: deprecated conversion from string constant to &#x27;char*&#x27; on Tue, 25 Aug 2009 18:03:02 GMT]]></title><description><![CDATA[<p>Hallo C++ Forum,</p>
<p>Ich habe eine C++-Programm welches C-bibliotheken aufruft.<br />
In meinem code habe ich an einigen stellen sowas stehen:</p>
<pre><code class="language-cpp">char      *side   = &quot;L&quot;;
</code></pre>
<p>Der Compiler gibt mir an jeder stelle obiges warning aus.<br />
Ich wollte jetzt durch nachlesn aus jedem dieser zuweisungen sowas machen:</p>
<pre><code class="language-cpp">const char * side = &quot;L&quot;;
</code></pre>
<p>Das geht aber nicht da:<br />
[code]<br />
invalid conversion from 'const char*' to 'char*'<br />
[code]</p>
<p>Ich weiß dass man evtl. std::string benutzen sollte...allerdings brauche ich doch für die C-Bibs dann char* arrays.</p>
<p>Wie kann ich das warning beseiteigen oder welche const-variante wäre hier sauer?<br />
Warum beschwert sich der compiler mit dem warning?</p>
<p>Danke euch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766592</guid><dc:creator><![CDATA[fragerzeichen]]></dc:creator><pubDate>Tue, 25 Aug 2009 18:03:02 GMT</pubDate></item><item><title><![CDATA[Reply to warning: deprecated conversion from string constant to &#x27;char*&#x27; on Tue, 25 Aug 2009 18:15:29 GMT]]></title><description><![CDATA[<p>Deine erste Version ist deprecated, weil eine Stringkonstante einem Pointer zugewiesen wird, der nicht const ist. Die zweite Version ist richtig.</p>
<p>&quot;invalid conversion...&quot; erhältst du in irgend einem Code, den du hier nicht gezeigt hast. Wahrscheinlich setzt du side irgendwo ein, wo ein char * verlangt wird.</p>
<p>Wenn du ein char-Array brauchst, musst du auch eins deklarieren:</p>
<pre><code class="language-cpp">char buffer[100];
</code></pre>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766599</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Tue, 25 Aug 2009 18:15:29 GMT</pubDate></item><item><title><![CDATA[Reply to warning: deprecated conversion from string constant to &#x27;char*&#x27; on Tue, 25 Aug 2009 18:18:14 GMT]]></title><description><![CDATA[<p>fragerzeichen schrieb:</p>
<blockquote>
<p>Das geht aber nicht da:</p>
<pre><code>invalid conversion from 'const char*' to 'char*'
</code></pre>
</blockquote>
<p>Wo tritt dieser Fehler auf? Sicher nicht bei einer der gezeigten Zeilen.</p>
<p>fragerzeichen schrieb:</p>
<blockquote>
<p>Ich weiß dass man evtl. std::string benutzen sollte...allerdings brauche ich doch für die C-Bibs dann char* arrays.</p>
</blockquote>
<p>Nein, brauchst du eigentlich auch nicht, <code>std::string</code> hat eine Methode <code>c_str()</code> , die dir einen C-kompatiblen, nullterminierten <code>const char*</code> zurückliefert. Probleme hast du nur, wenn du mit sehr altem oder schlecht designten Code hantierst, der <code>char*</code> verlangt, obwohl er nichts verändert.</p>
<p>Hintergrund für die Gefährlichkeit von Stringliteralen, die über <code>char*</code> angesprochen werden, ist die Veränderbarkeit der einzelnen Zeichen (was undefiniertes Verhalten produziert). Deshalb sollte man nach Möglichkeit Stringliterale immer als <code>const char*</code> speichern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766602</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 25 Aug 2009 18:18:14 GMT</pubDate></item><item><title><![CDATA[Reply to warning: deprecated conversion from string constant to &#x27;char*&#x27; on Tue, 25 Aug 2009 18:43:38 GMT]]></title><description><![CDATA[<p>Ok - aber was mache ich wenn die extrerne C-Funktion also die Library-funktion die ich aufrufe eben nur einen char* erwartet? Ich kann ja da nicht einfach einen const char* übergeben...? was tue ich da?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766613</guid><dc:creator><![CDATA[fragerzeichen]]></dc:creator><pubDate>Tue, 25 Aug 2009 18:43:38 GMT</pubDate></item><item><title><![CDATA[Reply to warning: deprecated conversion from string constant to &#x27;char*&#x27; on Tue, 25 Aug 2009 18:52:22 GMT]]></title><description><![CDATA[<p>fragerzeichen schrieb:</p>
<blockquote>
<p>Ok - aber was mache ich wenn die extrerne C-Funktion also die Library-funktion die ich aufrufe eben nur einen char* erwartet? Ich kann ja da nicht einfach einen const char* übergeben...? was tue ich da?</p>
</blockquote>
<p>Hängt davon ab, was die Funktion macht.<br />
Wenn sie den string ändern mag, kannst Du keinen Zeiger auf ein String-Literal nehmen. Geht einfach nicht, da das String-Literal im schreibgeschützten Speicher steht und da auch hingehört, zum Beispiel weil der Speicher dann shared und discardable ist oder für's String-Pooling.</p>
<pre><code class="language-cpp">char const* hw=&quot;hello world&quot;;
char const* w=&quot;world&quot;;
</code></pre>
<p>wird zu</p>
<pre><code class="language-cpp">char const* hw=&quot;hello world&quot;;
char const* w=hw+6;
</code></pre>
<p>Bist Du ganz sicher, daß die Funktion den String nur liest, kannst Du das const wegcasten.<br />
Aber wenn nicht, mußt Du Dir eine Kopie des String-Literals in eigenem Speicher anlegen und mit der Kopie arbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766615</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 25 Aug 2009 18:52:22 GMT</pubDate></item><item><title><![CDATA[Reply to warning: deprecated conversion from string constant to &#x27;char*&#x27; on Tue, 25 Aug 2009 18:49:21 GMT]]></title><description><![CDATA[<p>fragerzeichen schrieb:</p>
<blockquote>
<p>Ok - aber was mache ich wenn die extrerne C-Funktion also die Library-funktion die ich aufrufe eben nur einen char* erwartet? Ich kann ja da nicht einfach einen const char* übergeben...? was tue ich da?</p>
</blockquote>
<p>Bist du sicher, dass die Funktion nichts an deinem String verändert? Falls doch, musst du eben einen veränderbaren String übergeben. Um dich nicht um die Speicherverwaltung zu kümmern, wäre <code>std::vector&lt;char&gt;</code> etwas, dann kannst du über <code>&amp;vec[0]</code> auf die einzelnen Elemente zugreifen, als wärs ein C-String (du musst dann halt genügend grosse Länge und Nullterminierung sicherstellen).</p>
<p>Um was für eine Funktion handelt es sich denn (nicht nur Name, Beschreibung wäre interessant)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766616</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 25 Aug 2009 18:49:21 GMT</pubDate></item><item><title><![CDATA[Reply to warning: deprecated conversion from string constant to &#x27;char*&#x27; on Tue, 25 Aug 2009 19:47:44 GMT]]></title><description><![CDATA[<blockquote>
<p>Bist Du ganz sicher, daß die Funktion den String nur liest, kannst Du das const wegcasten.</p>
</blockquote>
<p>wie caste ich was weg?</p>
<p>so?</p>
<pre><code class="language-cpp">const char* side = &quot;L&quot;;
(char*) side;
</code></pre>
<p>?</p>
<p>es handelt sich um die funktion dlarf aus der Lapack library<br />
<a href="http://icl.cs.utk.edu/projectsfiles/f2j/javadoc/org/netlib/lapack/DLARF.html" rel="nofollow">http://icl.cs.utk.edu/projectsfiles/f2j/javadoc/org/netlib/lapack/DLARF.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766647</guid><dc:creator><![CDATA[fragerzeichen]]></dc:creator><pubDate>Tue, 25 Aug 2009 19:47:44 GMT</pubDate></item><item><title><![CDATA[Reply to warning: deprecated conversion from string constant to &#x27;char*&#x27; on Tue, 25 Aug 2009 20:00:14 GMT]]></title><description><![CDATA[<p>Besser mit dem spezialisierten Cast, der kann sonst nämlich nichts Böses anstellen:</p>
<pre><code class="language-cpp">const char* side = &quot;L&quot;;
char* evil_side = const_cast&lt;char*&gt;(side);
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> <strong>Vorsicht</strong>, das lässt dich nur kompilieren! Wenn deine Funktion in den Speicherbereich schreibt, nimmst du undefiniertes Verhalten in Kauf, was Abstürze, nicht nachvollziehbare Fehler und Schlimmeres verursachen kann. Also vergewissere dich, dass nur Lesezugriff erfolgt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766654</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 25 Aug 2009 20:00:14 GMT</pubDate></item><item><title><![CDATA[Reply to warning: deprecated conversion from string constant to &#x27;char*&#x27; on Tue, 25 Aug 2009 20:15:07 GMT]]></title><description><![CDATA[<p>naja...das ding ist in fortran geschrieben...</p>
<p>wäre eine möglihckeit einfach den const cast* in einen char* zu kopieren und den zu übergeben? oder ist das blödsinn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766667</guid><dc:creator><![CDATA[fragerzeichen]]></dc:creator><pubDate>Tue, 25 Aug 2009 20:15:07 GMT</pubDate></item><item><title><![CDATA[Reply to warning: deprecated conversion from string constant to &#x27;char*&#x27; on Tue, 25 Aug 2009 20:23:55 GMT]]></title><description><![CDATA[<p>Wie schon vorgeschlagen wurde nimmst du dafür am Besten einen char-Array und übergibst den (wenn man arrays an eine Funktion übergibt, macht der Compiler daraus einen Pointer aufs erste Element).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766671</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 25 Aug 2009 20:23:55 GMT</pubDate></item><item><title><![CDATA[Reply to warning: deprecated conversion from string constant to &#x27;char*&#x27; on Wed, 26 Aug 2009 04:27:23 GMT]]></title><description><![CDATA[<p>Doku sagt, es ist nur ein Zeichen.<br />
Dann reicht es,</p>
<pre><code class="language-cpp">char      side[]   = &quot;L&quot;;
</code></pre>
<p>bzw</p>
<pre><code class="language-cpp">char      side[]   = &quot;R&quot;;
</code></pre>
<p>zu machen.</p>
<p>Doku sagt, das Byte wird nur gelesen.<br />
Dann geht auch const_cast</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766759</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 26 Aug 2009 04:27:23 GMT</pubDate></item></channel></rss>