<?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[Dynamische Strings]]></title><description><![CDATA[<p>hi</p>
<p>hab da ma nen problem:<br />
ich hab nen bild : 1024*768 graustufen<br />
ich will nun jedes pixel auslesen und deren grauwert als hexwert-farbwert(#xxxxxx) in einem string abspeichern also &quot;#xxxxxx #xxxxxx&quot;</p>
<p>diesen string will ich dann an einen char* übergeben</p>
<p>irgendwie macht er die convertierung net...<br />
also ich bekomm den string schon zusammen (teilweise auch sehr langsam aber naja dazu kommen wir viellicht später) nur wenn ich den dann meinem char* übergeben will bekomm ich imemr die fehlermeldung das das net geht weil mein string vom typ const char* sei und ich das char* net übergeben kann ...</p>
<p>wie kann ich das lösen?</p>
<p>mfg Kaladial</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/191867/dynamische-strings</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 07:59:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/191867.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 Sep 2007 13:01:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dynamische Strings on Fri, 07 Sep 2007 13:01:19 GMT]]></title><description><![CDATA[<p>hi</p>
<p>hab da ma nen problem:<br />
ich hab nen bild : 1024*768 graustufen<br />
ich will nun jedes pixel auslesen und deren grauwert als hexwert-farbwert(#xxxxxx) in einem string abspeichern also &quot;#xxxxxx #xxxxxx&quot;</p>
<p>diesen string will ich dann an einen char* übergeben</p>
<p>irgendwie macht er die convertierung net...<br />
also ich bekomm den string schon zusammen (teilweise auch sehr langsam aber naja dazu kommen wir viellicht später) nur wenn ich den dann meinem char* übergeben will bekomm ich imemr die fehlermeldung das das net geht weil mein string vom typ const char* sei und ich das char* net übergeben kann ...</p>
<p>wie kann ich das lösen?</p>
<p>mfg Kaladial</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1360806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1360806</guid><dc:creator><![CDATA[Kaladial]]></dc:creator><pubDate>Fri, 07 Sep 2007 13:01:19 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Strings on Fri, 07 Sep 2007 13:16:24 GMT]]></title><description><![CDATA[<p>hmm....das heißt, du hast nen std::string mit dem farbwert, weiterverarbeiten willst du den string dann als char* und du willst das const wegbekommen - seh ich das richtig?</p>
<pre><code class="language-cpp">std::string test(&quot;hallo&quot;);
char* pString = (char*)test.c_str(); // einfacher C-Cast
std::cout&lt;&lt; pString;
</code></pre>
<p>lg, MrGentleman</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1360816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1360816</guid><dc:creator><![CDATA[MrGentleman]]></dc:creator><pubDate>Fri, 07 Sep 2007 13:16:24 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Strings on Fri, 07 Sep 2007 13:22:39 GMT]]></title><description><![CDATA[<p>MrGentleman schrieb:</p>
<blockquote>
<p>hmm....das heißt, du hast nen std::string mit dem farbwert, weiterverarbeiten willst du den string dann als char* und du willst das const wegbekommen - seh ich das richtig?</p>
<pre><code class="language-cpp">std::string test(&quot;hallo&quot;);
char* pString = (char*)test.c_str(); // einfacher C-Cast
std::cout&lt;&lt; pString;
</code></pre>
<p>lg, MrGentleman</p>
</blockquote>
<p>Ouch, was wird das denn? Wenn überhaupt, dann const_cast&lt;char*&gt;.<br />
Zuallererst sollte man aber gucken, ob man den Parameter nicht einfach als const char* deklariert. Wenn man das nicht kann, dann umkopieren, außer, man kann sich sicher sein, dass die (fremde) Funktion den char* nicht verändert, dann eventuell const_cast, weil die Menschheit zu schlecht ist, um const-Korrektheit einzuhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1360817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1360817</guid><dc:creator><![CDATA[Ouch]]></dc:creator><pubDate>Fri, 07 Sep 2007 13:22:39 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Strings on Fri, 07 Sep 2007 13:23:30 GMT]]></title><description><![CDATA[<p>Wenn du C++ benutzt, und davon geh ich aus, da du im C++ Forum postest, benutz doch bitte std::string, macht das Leben echt leichter:</p>
<pre><code class="language-cpp">//rgb zu Hex-Konvertierung
#include &lt;sstream&gt;
#include &lt;string&gt;

...
std::ostringstrean hex_stream;
hex_stream &lt;&lt; &quot;#&quot; &lt;&lt; std::hex &lt;&lt; r &lt;&lt; g &lt;&lt; b;
std::string hex_string = hex_stream.str();

//Falls du wirklich eine Übergabe als char* brauchst:
myfunction(hex_string.c_str());
...
</code></pre>
<p>Natürlich kannst du einen const char* keinem char* zuweisen, da const char* bedeutet, dass der String nicht verändert werden darf, während das bei char* eben nicht ausgeschlossen ist... Falls du dir sicher bist, dass (ich geh mal davon aus, du möchtest an eine Funktion übergeben) die Funktion den String nicht verändert, kannst du eine Übergabe mit const_cast&lt;&gt; erzwingen</p>
<pre><code class="language-cpp">void myfunction(char* str);
...
const char my_string[] = &quot;Hallo Welt!&quot;;
myfunction(const_cast&lt;char*&gt;(my_string));
</code></pre>
<p>Grüße,</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1360819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1360819</guid><dc:creator><![CDATA[JimmydaMage]]></dc:creator><pubDate>Fri, 07 Sep 2007 13:23:30 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Strings on Mon, 10 Sep 2007 08:20:39 GMT]]></title><description><![CDATA[<p>thx jo geht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1362363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1362363</guid><dc:creator><![CDATA[Kaladial]]></dc:creator><pubDate>Mon, 10 Sep 2007 08:20:39 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Strings on Mon, 10 Sep 2007 12:00:05 GMT]]></title><description><![CDATA[<p>MrGentleman schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">std::string test(&quot;hallo&quot;);
char* pString = (char*)test.c_str(); // einfacher C-Cast
std::cout&lt;&lt; pString;
</code></pre>
<p>...</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Besser:</p>
<pre><code class="language-cpp">// Vorgegebene Funktionen
void f_const_char(char const* p);
void f_char(char * p);

// &quot;Kopien-Halter&quot;-Hilfsklasse
class stringCpyHolder {
   vector&lt;char&gt; vec;
   string&amp; str;
public:
   stringCpyHolder(string&amp; s) :  str(s)
   { 
      copy(str.begin(), str.end(), back_inserter(vec));
      vec.push_back('\0');
   }
   operator char*() { return &amp;vec[0]; }
   ~stringCpyHolder() {
      str.clear();
      copy(vec.begin(), vec.end()-1, back_inserter(str));
   }
};

int main() {
   string test(&quot;hallo&quot;);
   // ..
   // Eine Menge komfortables und sicheres Arbeiten mit test
   // ..

   // easy
   f_const_char(test.c_str());

   {
      stringCpyHolder holder(test);
      f_char(holder);
   }
   cout &lt;&lt; &quot;-&gt; test:&quot; &lt;&lt; test &lt;&lt; &quot;\n&quot;;

   return 0;
}
</code></pre>
<p>Man spart sich die Speicherverwaltung mit dem vector ganz.<br />
Man kann da noch verschiedene Varianten bauen (z.B. &quot;zurückkopieren&quot; nur, wenn &quot;operator char*()&quot; überhaupt aufgerufen wurde.)<br />
Wenn einem der Sinn danach steht, kann man auch eine &quot;Proxy-Funktion&quot; drumherumschreiben ... muss das dann aber für jede Funktion tun (ist dafür aber sicher, dass man den string erst nach dem Zurückkopieren wieder anfasst)</p>
<p>EDIT: Aus historischen Gründen:<br />
Ich <em>meine</em>, dass die &quot;Zusicherungen von vector&quot; das hergeben.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1362475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1362475</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 10 Sep 2007 12:00:05 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Strings on Mon, 10 Sep 2007 11:12:34 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Ich <em>meine</em>, dass die &quot;Zusicherungen von vector&quot; das hergeben.</p>
</blockquote>
<p>Da das Thema in letzter Zeit häufiger vorkommt: Ja, diese Zusicherungen wurden im 2003er Standard ergänzt.</p>
<p>camper schrieb:</p>
<blockquote>
<p>Für vector steht es explicit da 23.2.4/1<br />
Zitat:</p>
<blockquote>
<p>The elements of a vector are stored contiguously, meaning that if v is a vector&lt;T, Allocator&gt; where T is some type other than bool, then it obeys the identity &amp;v[n] == &amp;v[0] + n for all 0 &lt;= n &lt; v.size().</p>
</blockquote>
<p>Für basic_string existiert keine solche Passage an entsprechender Stelle.</p>
</blockquote>
<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1327791.html#1327791" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1327791.html#1327791</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1362486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1362486</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 10 Sep 2007 11:12:34 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Strings on Mon, 10 Sep 2007 11:54:19 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Ich <em>meine</em>, dass die &quot;Zusicherungen von vector&quot; das hergeben.</p>
</blockquote>
<p>Da das Thema in letzter Zeit häufiger vorkommt: Ja, diese Zusicherungen wurden im 2003er Standard ergänzt. ...</p>
</blockquote>
<p>Danke !! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /><br />
Dann werde ich in Zukunft den 2. Weg wählen.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1362492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1362492</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 10 Sep 2007 11:54:19 GMT</pubDate></item></channel></rss>