<?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[notwendige Konvertierung von char* und const char*]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein kleines Problem bei der Verwendung von char* bzw. const char*.<br />
Mein Gnu-Compiler wirft einen Fehler, sobald ich einen char* einen const char*<br />
zuweise. Die c-übliche Konvertierung (char*) will ich nicht verwenden, static_cast&lt;char*&gt;(const char*) geht an dieser Stelle nicht.<br />
Die oben genannte Konstellation ist so vorgegeben, dh. der const char* - wert ist ein funktionsparameter und char* ein strukturwert, der im laufe des programms änderbar sein muss.<br />
memcpy(...) an dieser Stelle könnte fehlschlagen, da der char* - Wert NULL sein kann. Ein Abprüfen auf NULL ist m. E. ziemlich unelegant.</p>
<p>vielen Dank für eure Hilfe :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/230040/notwendige-konvertierung-von-char-und-const-char</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 11:35:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/230040.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 19 Dec 2008 14:23:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to notwendige Konvertierung von char* und const char* on Fri, 19 Dec 2008 14:23:45 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein kleines Problem bei der Verwendung von char* bzw. const char*.<br />
Mein Gnu-Compiler wirft einen Fehler, sobald ich einen char* einen const char*<br />
zuweise. Die c-übliche Konvertierung (char*) will ich nicht verwenden, static_cast&lt;char*&gt;(const char*) geht an dieser Stelle nicht.<br />
Die oben genannte Konstellation ist so vorgegeben, dh. der const char* - wert ist ein funktionsparameter und char* ein strukturwert, der im laufe des programms änderbar sein muss.<br />
memcpy(...) an dieser Stelle könnte fehlschlagen, da der char* - Wert NULL sein kann. Ein Abprüfen auf NULL ist m. E. ziemlich unelegant.</p>
<p>vielen Dank für eure Hilfe :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632903</guid><dc:creator><![CDATA[t.schubert]]></dc:creator><pubDate>Fri, 19 Dec 2008 14:23:45 GMT</pubDate></item><item><title><![CDATA[Reply to notwendige Konvertierung von char* und const char* on Fri, 19 Dec 2008 14:35:32 GMT]]></title><description><![CDATA[<p>Meines Erachtens liegt hier ein Designfehler vor. Wenn du einen <code>const char*</code> hast, ist das ein Zeiger auf Speicher, der nicht geändert werden soll. Du kannst zwar das <code>const</code> per <code>const_cast</code> wegcasten, allerdings ist das unschön und gegen die Erwartungshaltung des Anwenders. Zudem könnte sich dahinter ein Stringliteral befinden - Schreibzugriff auf Stringliterale führt zu undefiniertem Verhalten.</p>
<p>Wieso soll die Variable überhaupt änderbar sein? Oder geht es nur darum, einen String ( <code>const char*</code> ) in den internen String ( <code>char*</code> ) zu kopieren, und dann den internen zu manipulieren? Falls ja, kannst du dafür <code>std::copy()</code> verwenden (nicht vergessen, vorher Speicher anzufordern und am Schluss wieder freizugeben).</p>
<p>Aber das einfachste wäre sowieso der Datentyp <code>std::string</code> , was aber bei dir möglicherweise wegen des vorgegebenen Kontexts nicht geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632911</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 19 Dec 2008 14:35:32 GMT</pubDate></item><item><title><![CDATA[Reply to notwendige Konvertierung von char* und const char* on Fri, 19 Dec 2008 15:12:41 GMT]]></title><description><![CDATA[<p>um das prüfen auf 0 wirst du nicht drum rum kommen... es sei denn, du erklärst genauer, was du machst und wofür du den char* / const char* brauchst</p>
<pre><code class="language-cpp">if (!const_char_ptr)
   return;

std::string tmp = const_char_ptr;
//ggf tmp.reserve(andere_laenge)

//mit tmp arbeiten
</code></pre>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632934</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 19 Dec 2008 15:12:41 GMT</pubDate></item><item><title><![CDATA[Reply to notwendige Konvertierung von char* und const char* on Fri, 19 Dec 2008 18:37:58 GMT]]></title><description><![CDATA[<p>Vielen Dank für Eure Antworten.<br />
Der Hintergrund ist ein Zugriff auf eine in C geschriebene API.<br />
Diese API hat zum einem vordefinierte Zugriffsfunktionen, die oftmals einen<br />
const char* als Parameter wollen. Die Werte dafür sind in genannter API als #define - Konstanten abgelegt.<br />
Zum anderen greifen eben diese Funktionen auf interne Datenstrukturen zu, die wiederum char* - Werte erwarten.<br />
Daran kann ich nichts ändern.</p>
<p>Ich werde, wenn es keine anderen Ideen in diese Richtung gibt, memcpy(...) verwenden, muss natürlich die Strukturvariable vorher auf NULL prüfen,<br />
um einen Crash bei memcpy(...) zu vermeiden.<br />
Damit vermeidet man wenigstens dieses blöde Casting mittels (char*).</p>
<p>Etwas besseres fällt mir nicht ein.</p>
<p>Ich wäre für eine Lsg., die mehr C++ ist sehr dankbar. :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633046</guid><dc:creator><![CDATA[t.schubert]]></dc:creator><pubDate>Fri, 19 Dec 2008 18:37:58 GMT</pubDate></item><item><title><![CDATA[Reply to notwendige Konvertierung von char* und const char* on Fri, 19 Dec 2008 18:46:42 GMT]]></title><description><![CDATA[<p>Worin besteht denn nun genau den Teil, bei dem du Einfluss hast, beziehungsweise wo du etwas selbst schreiben musst?</p>
<p>Und nochmals: Geht es dir nur um den Wert eines Strings? Also könntest du diesen kopieren? Oder musst du direkt den <code>const char*</code> abändern (was ich fraglich fände)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633052</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 19 Dec 2008 18:46:42 GMT</pubDate></item><item><title><![CDATA[Reply to notwendige Konvertierung von char* und const char* on Fri, 19 Dec 2008 19:11:26 GMT]]></title><description><![CDATA[<p>Die zu füllende Struktur repräsentiert einen Menü-Item, d.h. mittels eines Arrays dieser Struktur (so die bisherige C - Umsetzung) hat man ein Menü definiert. Da ich aber eine C++ - Lsg. will, möchte ich das Menü als Vektor implementieren. Somit brauche ich aber auch genau diese Struktur als einzelnen Menüitem.<br />
Um diese Struktur aber als Menüitem in einem Vektor verwenden zu können, muss diese Struktur einen Konstruktor besitzen, was logischerweise in C nicht geht.<br />
Als habe ich sozusagen diese Struktur &quot;gewrappt&quot; und in einen eigenen Strukturtyp gepackt, der darüberhinaus noch einen Konstruktor besitzt, der die betreffende Struktur (und somit einen Menüitem) bei dessen Erzeugung initialisiert.<br />
Und da für die Initialisierung zwingend konstante Werte für Beschriftungen, Infotexte usw. vorgeschrieben sind, habe ich das angesprochene Problem.</p>
<p>Die Texte selbst müssen während des Programmlaufs aber manipulierbar sein. :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633065</guid><dc:creator><![CDATA[t.schubert]]></dc:creator><pubDate>Fri, 19 Dec 2008 19:11:26 GMT</pubDate></item><item><title><![CDATA[Reply to notwendige Konvertierung von char* und const char* on Fri, 19 Dec 2008 19:25:45 GMT]]></title><description><![CDATA[<p>Du weichst meiner Frage aus. <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>Der interne <code>char*</code> - soll der dem übergebenen <code>const char*</code> <strong>zugewiesen</strong> werden (dass es sich um den gleichen Speicherbereich handelt)? Oder soll er <strong>kopiert</strong> werden, sodass der interne String eine eigene Speicherverwaltung besitzt und anschliessend vom übergebenen String unabhängig ist?</p>
<p>Wäre auch gut, wenn du die relevanten Codestellen (Schnittstelle, interne Repräsentierung, Wrapper) kurz aufzeigen könntest. Natürlich nur, wenn diese nicht streng geheim sind. <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/1633073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633073</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 19 Dec 2008 19:25:45 GMT</pubDate></item><item><title><![CDATA[Reply to notwendige Konvertierung von char* und const char* on Sat, 20 Dec 2008 04:53:39 GMT]]></title><description><![CDATA[<p>t.schubert schrieb:</p>
<blockquote>
<p>Die zu füllende Struktur repräsentiert einen Menü-Item, d.h. mittels eines Arrays dieser Struktur (so die bisherige C - Umsetzung) hat man ein Menü definiert. Da ich aber eine C++ - Lsg. will, möchte ich das Menü als Vektor implementieren. Somit brauche ich aber auch genau diese Struktur als einzelnen Menüitem.<br />
Um diese Struktur aber als Menüitem in einem Vektor verwenden zu können, muss diese Struktur einen Konstruktor besitzen, was logischerweise in C nicht geht.<br />
Als habe ich sozusagen diese Struktur &quot;gewrappt&quot; und in einen eigenen Strukturtyp gepackt, der darüberhinaus noch einen Konstruktor besitzt, der die betreffende Struktur (und somit einen Menüitem) bei dessen Erzeugung initialisiert.<br />
Und da für die Initialisierung zwingend konstante Werte für Beschriftungen, Infotexte usw. vorgeschrieben sind, habe ich das angesprochene Problem.</p>
<p>Die Texte selbst müssen während des Programmlaufs aber manipulierbar sein. :xmas1:</p>
</blockquote>
<p>Hört sich für mich danach an, also ob du nicht wüstest was du machst oder die API schrott ist (welche ist es denn?). Wenn man den Text für einen Menüeintrag ändern will gibt es normal Methoden um die zu setzen/änderen und man ändert nicht den vorher irgendwas gesetzten string direkt oder solchen Quatsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633183</guid><dc:creator><![CDATA[200Degree]]></dc:creator><pubDate>Sat, 20 Dec 2008 04:53:39 GMT</pubDate></item><item><title><![CDATA[Reply to notwendige Konvertierung von char* und const char* on Sat, 20 Dec 2008 13:28:20 GMT]]></title><description><![CDATA[<p>wie sollst du ein char* übergeben, wenn du nicht weist, wie lang der menü-eintrags-name ist? ansonsten solltest du evtl auch mal nexus' frage(n) beantworten damit man dir helfen könnte ^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633285</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 20 Dec 2008 13:28:20 GMT</pubDate></item></channel></rss>