<?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[String nach unsigned char*]]></title><description><![CDATA[<p>Hi,</p>
<p>nachdem ich gestern ja schon gefragt habe, wie man unsigned char* nach float konvertieren kann, habe ich heute schon wieder ein sehr ähnliches Problem.</p>
<p>Heute habe ich auch schon in der FAQ nachgeschaut und die Hilfe bemüht, aber ich habe nix gefunden.</p>
<p>Wie dem auch sei, in dem Framework, welches ich verwende, will ich einen String, der zuvor aus Zahlen aufgebaut wurde (per ostringstream) zu einem unsigned char* konvertieren.</p>
<p>Jetzt sieht mein Code wie folgt aus:</p>
<pre><code class="language-cpp">unsigned char buf[512];
float value, value_old = 0.0f;
bool initialized = false;
char* c_str = &quot;&quot;;
unsigned int str_length = 0;
ostringstream ostr;
...
if (initialized &amp;&amp; value_old * value &lt;= 0) {
	ostr &lt;&lt; value_old &lt;&lt; &quot; &quot; &lt;&lt; value &lt;&lt; endl;
	c_str = (char *)ostr.str().c_str();
	str_length = ostr.str().size();
	memcpy(buf, c_str, str_length);

	...
}
</code></pre>
<p>Wenn ich den Code jetzt mehrmals (in einer while Schliefe) mit verschiedenen values (values_old) aufrufe, dann erhalte ich aber leider immer den selben Inhalt in buf. Irgendwann bricht das Framework auch mit einem Segmentation fault ab.</p>
<p>Kann mir wer sagen was hier falsch ist und vor allem: wieso?</p>
<p>Danke,<br />
Niko</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/155454/string-nach-unsigned-char</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 12:04:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/155454.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 06 Aug 2006 14:18:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to String nach unsigned char* on Sun, 06 Aug 2006 14:20:18 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>nachdem ich gestern ja schon gefragt habe, wie man unsigned char* nach float konvertieren kann, habe ich heute schon wieder ein sehr ähnliches Problem.</p>
<p>Heute habe ich auch schon in der FAQ nachgeschaut und die Hilfe bemüht, aber ich habe nix gefunden.</p>
<p>Wie dem auch sei, in dem Framework, welches ich verwende, will ich einen String, der zuvor aus Zahlen aufgebaut wurde (per ostringstream) zu einem unsigned char* konvertieren.</p>
<p>Jetzt sieht mein Code wie folgt aus:</p>
<pre><code class="language-cpp">unsigned char buf[512];
float value, value_old = 0.0f;
bool initialized = false;
char* c_str = &quot;&quot;;
unsigned int str_length = 0;
ostringstream ostr;
...
if (initialized &amp;&amp; value_old * value &lt;= 0) {
	ostr &lt;&lt; value_old &lt;&lt; &quot; &quot; &lt;&lt; value &lt;&lt; endl;
	c_str = (char *)ostr.str().c_str();
	str_length = ostr.str().size();
	memcpy(buf, c_str, str_length);

	...
}
</code></pre>
<p>Wenn ich den Code jetzt mehrmals (in einer while Schliefe) mit verschiedenen values (values_old) aufrufe, dann erhalte ich aber leider immer den selben Inhalt in buf. Irgendwann bricht das Framework auch mit einem Segmentation fault ab.</p>
<p>Kann mir wer sagen was hier falsch ist und vor allem: wieso?</p>
<p>Danke,<br />
Niko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111579</guid><dc:creator><![CDATA[Niko1111]]></dc:creator><pubDate>Sun, 06 Aug 2006 14:20:18 GMT</pubDate></item><item><title><![CDATA[Reply to String nach unsigned char* on Sun, 06 Aug 2006 14:21:04 GMT]]></title><description><![CDATA[<p>du castest c_str nach char*, dass du das tun &quot;musst&quot; schließt auf misbrauch von den Daten.<br />
Es wird nicht umsonst ein _const_ char* zurückgegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111581</guid><dc:creator><![CDATA[Lolz]]></dc:creator><pubDate>Sun, 06 Aug 2006 14:21:04 GMT</pubDate></item><item><title><![CDATA[Reply to String nach unsigned char* on Sun, 06 Aug 2006 14:24:29 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>naja... den Teil hab ich per Copy&amp;Paste von einer anderen Klasse im Framework!<br />
Ist zwar nicht optimal, aber ich denke nicht, dass das was mit dem eigentlichen Problem zu tun hat.</p>
<p>MfG,<br />
Niko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111582</guid><dc:creator><![CDATA[Niko1111]]></dc:creator><pubDate>Sun, 06 Aug 2006 14:24:29 GMT</pubDate></item><item><title><![CDATA[Reply to String nach unsigned char* on Sun, 06 Aug 2006 15:20:21 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>nachdem ich jetzt mal eine kleine Pause gemacht hab, kann ich auch wieder denken <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="😉"
    /><br />
Kurz gesagt: Das Problem ist gelöst!<br />
Der Fehler lag darin, dass ostr immer größer wurde...<br />
...wenn man den stringstream leer, dann funktioniert es!</p>
<p>Hier der funktionierende Code:</p>
<pre><code class="language-cpp">unsigned char buf[512];
float value, value_old = 0.0f;
bool initialized = false;
char* c_str = &quot;&quot;;
unsigned int str_length = 0;
ostringstream ostr;

...

if (initialized &amp;&amp; value_old * value &lt;= 0) {
    // String leeren
    ostr.str(&quot;&quot;);
    ostr &lt;&lt; value_old &lt;&lt; &quot; &quot; &lt;&lt; value &lt;&lt; endl;
    c_str = (char *)ostr.str().c_str();
    str_length = ostr.str().size();
    memcpy(buf, c_str, str_length);

    ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1111636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111636</guid><dc:creator><![CDATA[Niko1111]]></dc:creator><pubDate>Sun, 06 Aug 2006 15:20:21 GMT</pubDate></item><item><title><![CDATA[Reply to String nach unsigned char* on Sun, 06 Aug 2006 16:07:34 GMT]]></title><description><![CDATA[<p>Eine Frage solltest Du Dir noch stellen:<br />
Ist der buf hinterher nullterminiert, wenn vorher zufälliger Inhalt dringestanden hätte? <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/1111671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111671</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sun, 06 Aug 2006 16:07:34 GMT</pubDate></item><item><title><![CDATA[Reply to String nach unsigned char* on Sun, 06 Aug 2006 16:19:59 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe noch keine genaue Doukmentation zu ostr.str().c_str() gefunden, aber liefert mir die Funktion den String nicht schon nullterminiert (analog die Size Funktion... beinhaltet auch schon die \0, oder?)?</p>
<p>Ich steh grad auf der Leitung, sorry!<br />
Was soll da noch ein Problem sein?</p>
<p>Kann mir evtl. jemand mal einen Link zu ner Page geben, auf der die ganzen Funktionen besser erklärt sind als per &quot;man&quot; Befehl oder in meinem kleinen C/C++ gepackt Buch?</p>
<p>Niko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111680</guid><dc:creator><![CDATA[Niko1111]]></dc:creator><pubDate>Sun, 06 Aug 2006 16:19:59 GMT</pubDate></item><item><title><![CDATA[Reply to String nach unsigned char* on Sun, 06 Aug 2006 16:27:33 GMT]]></title><description><![CDATA[<p>std::string::c_str() liefert zwar einen nullterminierten C-String zurück, aber std::string::size() liefert die echte Länge des Textes zurück. Es garantiert auch niemand, dass die Sequenz innerhalb std::string &quot;am Stück&quot; oder nullterminiert gespeichert werden muss, es wird nur garantiert, dass std::string::c_str() einen Zeiger auf einen nullterminierten, am Stück abgelegten Speicherbereich zurückgibt, der diesen Text enthält und solange gültig ist, wie Du den std::string nicht veränderst oder zerstörst.</p>
<p>Nachzulesen z.B. auf <a href="http://www.dinkumware.com/manuals/?manual=compleat&amp;page=string2.html#basic_string::c_str" rel="nofollow">http://www.dinkumware.com/manuals/?manual=compleat&amp;page=string2.html#basic_string::c_str</a><br />
(Vorsicht, die Referenz ist ziemlich &quot;wissenschaftlich&quot; <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>EDIT:<br />
Warum nimmst Du nicht str(n)cpy, der kopiert das Nullbyte &quot;naturgemäß&quot; mit...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111686</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sun, 06 Aug 2006 16:27:33 GMT</pubDate></item><item><title><![CDATA[Reply to String nach unsigned char* on Sun, 06 Aug 2006 17:04:07 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>okay, das war schon mal sehr hilfreich <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="😉"
    /><br />
Muss in C++ wohl noch einiges lernen!</p>
<p>Danke,<br />
Niko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111714</guid><dc:creator><![CDATA[Niko1111]]></dc:creator><pubDate>Sun, 06 Aug 2006 17:04:07 GMT</pubDate></item><item><title><![CDATA[Reply to String nach unsigned char* on Sun, 06 Aug 2006 19:49:02 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>also ich habe das Problem mit der Nulltermination durch ein</p>
<pre><code class="language-cpp">buf[str_length] = '\0'
</code></pre>
<p>gelöst.</p>
<p>Aber wie ich da strcpy verwenden kann, weis ich leider nicht. Das Problem ist, dass strcpy ein char* und ein const char* erwartet. Ich arbeite aber mit dem unsigned char*. Kann ich das irgednwie einfach umwandeln?</p>
<p>Ich muss wirklich sagen, dass mich es ein wenig &quot;nervt&quot;, dass hier unsigned verwendet wurde. Damit komme ich noch nicht wirklich &quot;gut&quot; klar.</p>
<p>MfG,<br />
Niko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111815</guid><dc:creator><![CDATA[Niko1111]]></dc:creator><pubDate>Sun, 06 Aug 2006 19:49:02 GMT</pubDate></item></channel></rss>