<?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[Konvertierung long -&amp;gt; char*]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich komme mit dem konvertieren einer long Variable in einen char Pointer nicht klar. Ich möchte in C++ die Zeitdifferenz messen(m_deltaT) und in einen char Pointer konvertieren, damit ich sie über SDL ausgeben kann. Die Messung funktioniert korrekt, m_deltaT wird kontinuierlich erhöht.</p>
<p>Mein aktueller Code ist folgender (mit Hilfe <a href="http://www.gidforums.com/t-1164.html" rel="nofollow">http://www.gidforums.com/t-1164.html</a>):</p>
<pre><code class="language-cpp">long m_deltaT = 0; (global)

m_deltaT += //Zeitmessung mittels timeval
char* longvar = new char[4];
longvar = reinterpret_cast&lt;char*&gt;(&amp;m_deltaT);
//RenderText...
</code></pre>
<p>longvar ist dann der Text, den ich dann in OpenGL mit SDL_ttf schreiben möchte.</p>
<p>Da der obrige Code 100/sec. aufgerufen wird (eingestellte Wiederholrate in OpenGL) dauert es nicht lange bis ein Speicherzugriffsfehler kommt und das Programm abstürzt (Ausgabe funktioniert etwa 3 sec.).</p>
<pre><code class="language-cpp">delete[] longvar;
</code></pre>
<p>nach der Übergabe an RenderText einzufügen bricht sofort nach dem Start mit free(): invalid pointer: 0x08059014 ab.</p>
<p>Vor das long, bzw. char* kann ich kein unsigned vor setzen, da die Methode TTF_RenderText_Blended von SDL mit const char* arbeitet.</p>
<p>Ich hoffe ihr könnt mir da helfen.<br />
Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/208923/konvertierung-long-gt-char</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 12:33:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/208923.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 24 Mar 2008 15:39:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konvertierung long -&amp;gt; char* on Mon, 24 Mar 2008 15:39:59 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich komme mit dem konvertieren einer long Variable in einen char Pointer nicht klar. Ich möchte in C++ die Zeitdifferenz messen(m_deltaT) und in einen char Pointer konvertieren, damit ich sie über SDL ausgeben kann. Die Messung funktioniert korrekt, m_deltaT wird kontinuierlich erhöht.</p>
<p>Mein aktueller Code ist folgender (mit Hilfe <a href="http://www.gidforums.com/t-1164.html" rel="nofollow">http://www.gidforums.com/t-1164.html</a>):</p>
<pre><code class="language-cpp">long m_deltaT = 0; (global)

m_deltaT += //Zeitmessung mittels timeval
char* longvar = new char[4];
longvar = reinterpret_cast&lt;char*&gt;(&amp;m_deltaT);
//RenderText...
</code></pre>
<p>longvar ist dann der Text, den ich dann in OpenGL mit SDL_ttf schreiben möchte.</p>
<p>Da der obrige Code 100/sec. aufgerufen wird (eingestellte Wiederholrate in OpenGL) dauert es nicht lange bis ein Speicherzugriffsfehler kommt und das Programm abstürzt (Ausgabe funktioniert etwa 3 sec.).</p>
<pre><code class="language-cpp">delete[] longvar;
</code></pre>
<p>nach der Übergabe an RenderText einzufügen bricht sofort nach dem Start mit free(): invalid pointer: 0x08059014 ab.</p>
<p>Vor das long, bzw. char* kann ich kein unsigned vor setzen, da die Methode TTF_RenderText_Blended von SDL mit const char* arbeitet.</p>
<p>Ich hoffe ihr könnt mir da helfen.<br />
Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479645</guid><dc:creator><![CDATA[Razhal]]></dc:creator><pubDate>Mon, 24 Mar 2008 15:39:59 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung long -&amp;gt; char* on Mon, 24 Mar 2008 16:05:32 GMT]]></title><description><![CDATA[<p>Schau Dir die Zeiger-Grundlagen nochmal an. Was Du da machst, ist folgendes: Du räumst mit 'new' Speicher auf dem Heap frei und lässt den Zeiger 'longvar' darauf zeigen. In der nächsten Zeile änderst Du aber den Zeiger; er zeigt jetzt nicht mehr auf den Heap-Speicher sondern auf eine Variable auf dem Stack.</p>
<p>Dann versuchst Du, diesen Stack-Speicher per 'delete []' freizuräumen, was nicht klappt. Der von Dir belegte Heap-Speicher wird nie verwendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479653</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Mon, 24 Mar 2008 16:05:32 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung long -&amp;gt; char* on Mon, 24 Mar 2008 16:18:17 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>danke erstmal für die Antwort. Nach der Erklärung habe ich den Fehler im Grunde verstanden, nur an der Umsetzung hapert es dennoch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Ist denn die Änderung in</p>
<pre><code class="language-cpp">const char* longvar = reinterpret_cast&lt;const char*&gt;(&amp;m_deltaT);
</code></pre>
<p>immernoch das selbe Problem? Der Zeiger geht jetzt doch direkt auf die Variablenadresse.</p>
<p>Funktionieren tut es nämlich immernoch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479661</guid><dc:creator><![CDATA[Razhal]]></dc:creator><pubDate>Mon, 24 Mar 2008 16:18:17 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung long -&amp;gt; char* on Mon, 24 Mar 2008 16:20:33 GMT]]></title><description><![CDATA[<p>Razhal schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>danke erstmal für die Antwort. Nach der Erklärung habe ich den Fehler im Grunde verstanden, nur an der Umsetzung hapert es dennoch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Ist denn die Änderung in</p>
<pre><code class="language-cpp">const char* longvar = reinterpret_cast&lt;const char*&gt;(&amp;m_deltaT);
</code></pre>
<p>immernoch das selbe Problem? Der Zeiger geht jetzt doch direkt auf die Variablenadresse.</p>
<p>Funktionieren tut es nämlich immernoch nicht.</p>
</blockquote>
<p>Was funktioniert denn nicht? Dieser Code ist so an sich korrekt. Du versuchst doch hoffentlich nicht, diesen Speicher dann mit 'delete' freizugeben? Das ist ja Stack-Speicher und kein Heap-Speicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479665</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Mon, 24 Mar 2008 16:20:33 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung long -&amp;gt; char* on Mon, 24 Mar 2008 16:27:11 GMT]]></title><description><![CDATA[<p>Ich habe kein delete[] nachgefügt, da ich ja auch kein Objekt mit new angelegt habe.<br />
Ich bekomme immernoch den Speicherzugriffsfehler. So langsam vermute ich aber, dass es an der SDL_ttf liegt - wahrscheinlich mal wieder die Schrift zu groß oder ähnliches.</p>
<p>Danke trotzdem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479668</guid><dc:creator><![CDATA[Razhal]]></dc:creator><pubDate>Mon, 24 Mar 2008 16:27:11 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung long -&amp;gt; char* on Mon, 24 Mar 2008 17:25:12 GMT]]></title><description><![CDATA[<p>Also irgendwie stehe ich grad auf dem Schlauch, als Ausgabe bekomme ich die entspr. Werte der ASCII Tabelle an den Stellen von m_deltaT.<br />
z.B.:<br />
m_deltaT = 36 : Ausgabe $<br />
m_deltaT = 38 : Ausgabe &amp;<br />
usw.</p>
<p>Dann ist das auch kein Wunder, dass nach kurzer Zeit ein Speicherfehler auftritt, nämlich dann, wenn die Größe der ASCII Tabelle überschritten ist.</p>
<p>Ich möchte doch nur den Wert von m_deltaT augegeben haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479691</guid><dc:creator><![CDATA[Razhal]]></dc:creator><pubDate>Mon, 24 Mar 2008 17:25:12 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung long -&amp;gt; char* on Mon, 24 Mar 2008 18:15:29 GMT]]></title><description><![CDATA[<p>Razhal schrieb:</p>
<blockquote>
<p>Ich möchte doch nur den Wert von m_deltaT augegeben haben.</p>
</blockquote>
<p>Ah, dann hast Du den Sinn von 'reinterpret_cast' falsch verstanden. Das, was Du willst, ist eine Zahl als String ausgeben? Dann kannst Du einfach folgendes schreiben:</p>
<pre><code class="language-cpp">cout &lt;&lt; m_deltaT;
</code></pre>
<p>Wenn Du den Inhalt der Zahl in einen String speichern musst, dann schau Dir mal die FAQ „Einmal Zahl nach String und zurück“ an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479720</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Mon, 24 Mar 2008 18:15:29 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung long -&amp;gt; char* on Mon, 24 Mar 2008 18:15:52 GMT]]></title><description><![CDATA[<p>Ich habs nun doch noch hinbekommen.<br />
Für alle die es interessiert:</p>
<p>(statt long, nun int)</p>
<pre><code class="language-cpp">char buffer[256];
sprintf(buffer, &quot;%i&quot;, m_deltaT/180);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1479721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479721</guid><dc:creator><![CDATA[Razhal]]></dc:creator><pubDate>Mon, 24 Mar 2008 18:15:52 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung long -&amp;gt; char* on Mon, 24 Mar 2008 18:19:11 GMT]]></title><description><![CDATA[<p>Urg, 'sprintf', benutz lieber die andere Methode aus der FAQ, die ist weniger C-ig. <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/1479724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479724</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Mon, 24 Mar 2008 18:19:11 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung long -&amp;gt; char* on Mon, 24 Mar 2008 18:34:49 GMT]]></title><description><![CDATA[<p>Wenn ich die Methode 1 oder 2 aus der FAQ nutze, bekomme ich als Resultat immer einen string, der Compiler meckert aber, weil ich ja als char* schreiben will.<br />
Mit der sprintf und dem char buffer funktionierts doch.<br />
Was ist an der Variante zu C-ig ? <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>Grüße.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479731</guid><dc:creator><![CDATA[Razhal]]></dc:creator><pubDate>Mon, 24 Mar 2008 18:34:49 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung long -&amp;gt; char* on Mon, 24 Mar 2008 18:46:08 GMT]]></title><description><![CDATA[<p>Razhal schrieb:</p>
<blockquote>
<p>Was ist an der Variante zu C-ig ? <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>
</blockquote>
<p>Dass Du 'char*' statt 'std::string' benutzt, und außerdem, dass hier ein Puffer fester Größe verwendet wird. 256 ist zwar eine sichere Größe, aber vom Konzept her ist solch ein Code eine Einladung für Buffer Overflows. Solch ein Code ist einfach konzeptionell unsicher und sollte gemieden werden. Dafür gibt's ja extra die 'std::string'-Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479736</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Mon, 24 Mar 2008 18:46:08 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung long -&amp;gt; char* on Mon, 24 Mar 2008 19:20:11 GMT]]></title><description><![CDATA[<p>Um einen std::string an eine Funktion zu übergeben, die einen &quot;const char *&quot; erwartet, gibt es die Methode c_str():</p>
<pre><code class="language-cpp">std::string s(&quot;Dein Text&quot;);

func(s.c_str());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1479744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479744</guid><dc:creator><![CDATA[~string]]></dc:creator><pubDate>Mon, 24 Mar 2008 19:20:11 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung long -&amp;gt; char* on Mon, 24 Mar 2008 20:46:48 GMT]]></title><description><![CDATA[<p>wie bereits geschrieben nimmst du entweder std::string (#include &lt;string&gt;, zum Einlesen streams, die Umwandlung in const char* erfolgt durch stringvarialbe.c_str ())<br />
oder du schreibst dir ne fkt, die das char* - teil für dich füllt...</p>
<pre><code class="language-cpp">unsigned char GetLaenge (const unsigned long &amp;nr)
//&amp; kannst du auch weglassen, wir der compiler eh nicht nutzen - schaden tut es aber nicht
{
//entweder du gehst über powerof oder machst es so in etwa:
unsigned char laenge (0);
for (long i (1); i &lt;= nr;i*=10)
 {
  ++laenge;
 }
return (laenge-1);
};

void LongToChar (long nr, char *string)
{
unsigned char laenge (GetLaenge (nr));
delete string;
string = new char [laenge+1];
string[laenge--] = 0;
for (laenge; laenge != 0; --laenge)
 {
  string[laenge] = nr%10 + '0';
  nr /= 10;
 }
string[0] = nr + '0';
};
</code></pre>
<p>Sollte so eigtl stimmen ^^<br />
Byebye : )</p>
<p>jz sollte es wirklich funktionieren ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479748</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 24 Mar 2008 20:46:48 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung long -&amp;gt; char* on Mon, 24 Mar 2008 19:57:00 GMT]]></title><description><![CDATA[<p>unskilled, du machst deinem Namen alle Ehre -(</p>
<p>Dein Code ist grauenvoll...<br />
- free() sollte man in C++ vermeiden (und erst recht nicht in Kombination mit new einsetzen)<br />
- &amp; ist völlig unnutz bei GetLaenge (und wenn schon dann eine konstante Referenz)<br />
- viel zu C lastig</p>
<p>Fazit: ignorieren -)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479766</guid><dc:creator><![CDATA[~skilled]]></dc:creator><pubDate>Mon, 24 Mar 2008 19:57:00 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung long -&amp;gt; char* on Mon, 24 Mar 2008 20:45:06 GMT]]></title><description><![CDATA[<p>1. hmmm... kA, warum ich da free hingeschrieben hatte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f611.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--expressionless_face"
      title="-_-"
      alt="😑"
    /><br />
2. huch - das const hatte ich im eifer vergessen ^^<br />
habs berichtigt</p>
<p>3. na und?<br />
wenn er char will, dann is das nu ma der effektivste weg (&quot;Da der obrige Code 100/sec. aufgerufen wird&quot;)</p>
<p>//edit: der funktionsname fehlt auch noch seh ich gerade - aber nun ja ^^<br />
@~skilled denk dir halt drecks_c_style_fkt dort hin <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /><br />
und war noch nen fehler im schleifenkopf -.-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479772</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 24 Mar 2008 20:45:06 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung long -&amp;gt; char* on Tue, 25 Mar 2008 18:52:17 GMT]]></title><description><![CDATA[<p>Also ich würde es mit std::stringstream machen:</p>
<pre><code class="language-cpp">long myLong;
std::stringstream myString;
myString &lt;&lt; myLong;
myFunction(myString.str().c_str());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1480235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1480235</guid><dc:creator><![CDATA[Fredi]]></dc:creator><pubDate>Tue, 25 Mar 2008 18:52:17 GMT</pubDate></item></channel></rss>