<?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[C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger]]></title><description><![CDATA[<p>Hallole.<br />
Wie schon in meinem gestrigen Post beschrieben bin ich, was C++ angeht Anfänger.<br />
Ich programmiere ISAPI DLLs mit C, möchte aber langfristig auf C++ umsteigen und mache immer wieder Versuche mit c++.</p>
<p>In meiner DLL bekomme ich per Socket Streams rein die einen festgelegten Text enthalten. Meine (Haupt) Aufgabe ist es, diesen auseinander zu hacken und in HTML Code zu verpacken, damit ich das an den Browser ausgeben kann.</p>
<p>Bisher arbeitete ich immer mit folgenden funktionen:</p>
<p>strtok - um nach einem Bestimmten Zeichen zu suchen und der String zu zerhacken.<br />
sprintf - um die verschiedenen String-Teile mit HTML Code zusammen zu bauen<br />
strcpy - strcat usw.<br />
Das Ganze oft in einer Schleife.</p>
<p>Dabei gehe ich so vor:</p>
<p>- Ich kopiere den OriginalString in einen buffer (damit strtok den nicht zerstört).</p>
<p>- Kopiere den entsprechenden HTML Code in einen anderen HTMLbuffer.<br />
- Verhexle den buffer durch manchmal 10-20 Aufrufe hintereinander von strtok und kopieren die Teilstrings wiederum in verschieden zwischen buffer.<br />
Das Ganze oft in einer Schleifen weil ich bis zu 300 Strings bekomme.</p>
<p>- Reserviere Speicher und baue die viele verschiedenen Teilstrings zusammen und schicke das zusammen mit men header, footer usw an den Browser.</p>
<p>Nun meine Frage:</p>
<p>Gibts -vor allem in Sachen strtok- mit C++ eine bessere/einfachere/komfortablere Möglichkeit?<br />
Denn das zerhacken und gleichzeitig Fehlerabfangen nach jedem Strtok (falls der String durch nen Fehler mal anders aussieht) kommt mir ziemlich umständlich und aufwendig vor.<br />
Habe das schon so zig mal gemacht aber es ist ein Mordsaufwand.</p>
<p>Aber was anderes fällt mir nicht ein.<br />
Wie kann man das sonst noch machen?</p>
<p>Danke Mondmann</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/162588/c-stringoperationen-im-vergleich-zu-c-stringoperationen-c-anfänger</link><generator>RSS for Node</generator><lastBuildDate>Mon, 14 Sep 2026 04:54:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/162588.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 20 Oct 2006 06:51:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 06:51:28 GMT]]></title><description><![CDATA[<p>Hallole.<br />
Wie schon in meinem gestrigen Post beschrieben bin ich, was C++ angeht Anfänger.<br />
Ich programmiere ISAPI DLLs mit C, möchte aber langfristig auf C++ umsteigen und mache immer wieder Versuche mit c++.</p>
<p>In meiner DLL bekomme ich per Socket Streams rein die einen festgelegten Text enthalten. Meine (Haupt) Aufgabe ist es, diesen auseinander zu hacken und in HTML Code zu verpacken, damit ich das an den Browser ausgeben kann.</p>
<p>Bisher arbeitete ich immer mit folgenden funktionen:</p>
<p>strtok - um nach einem Bestimmten Zeichen zu suchen und der String zu zerhacken.<br />
sprintf - um die verschiedenen String-Teile mit HTML Code zusammen zu bauen<br />
strcpy - strcat usw.<br />
Das Ganze oft in einer Schleife.</p>
<p>Dabei gehe ich so vor:</p>
<p>- Ich kopiere den OriginalString in einen buffer (damit strtok den nicht zerstört).</p>
<p>- Kopiere den entsprechenden HTML Code in einen anderen HTMLbuffer.<br />
- Verhexle den buffer durch manchmal 10-20 Aufrufe hintereinander von strtok und kopieren die Teilstrings wiederum in verschieden zwischen buffer.<br />
Das Ganze oft in einer Schleifen weil ich bis zu 300 Strings bekomme.</p>
<p>- Reserviere Speicher und baue die viele verschiedenen Teilstrings zusammen und schicke das zusammen mit men header, footer usw an den Browser.</p>
<p>Nun meine Frage:</p>
<p>Gibts -vor allem in Sachen strtok- mit C++ eine bessere/einfachere/komfortablere Möglichkeit?<br />
Denn das zerhacken und gleichzeitig Fehlerabfangen nach jedem Strtok (falls der String durch nen Fehler mal anders aussieht) kommt mir ziemlich umständlich und aufwendig vor.<br />
Habe das schon so zig mal gemacht aber es ist ein Mordsaufwand.</p>
<p>Aber was anderes fällt mir nicht ein.<br />
Wie kann man das sonst noch machen?</p>
<p>Danke Mondmann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158084</guid><dc:creator><![CDATA[Mondmann]]></dc:creator><pubDate>Fri, 20 Oct 2006 06:51:28 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 07:24:04 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>also die Klasse std::string bietet einem sehr viel in dieser Richtung: Eine ganze Reihe find()s, substr(), append(), replace, ...</p>
<p>Ich behaupte mal, dass Du mit denen alles hinbekommst, was Du brauchst - und zwar viel einfacher, sicherer, übersichtlicher, .... als mit strtok()&amp;Co.<br />
Gerade bei String-Bearbeitung lohnt sich IMO der Umstieg auf &quot;++&quot;.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158098</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 20 Oct 2006 07:24:04 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 07:25:35 GMT]]></title><description><![CDATA[<p>Du kannst mit find_first_of() nach deinen Trennzeichen im String suchen und anschließend per subtr() die Teilstücke herausschneiden, die dich interessieren.</p>
<p>(und im Gegensatz zu char* kümmert sich std::string selber um den Speicher, den es benötigt)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158099</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 20 Oct 2006 07:25:35 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 08:38:26 GMT]]></title><description><![CDATA[<p>std::string ist die String-Klasse. Damit kannst Du strcpy, strcat, strlen und co erschlagen. Statt sprintf verwendest Du std::ostringstream. Bei strtok hilft Dir std::istringstream und istream-operatoren oder std::getline. Hier ein paar Beispiele:</p>
<pre><code class="language-cpp">std::string s1;   // statt char s1[256];
s1  = &quot;Hallo&quot;;    // statt strcpy(s1, &quot;Hallo&quot;);
s1 += &quot;, Welt!&quot;;  // statt strcat(s1, &quot;, Welt!&quot;);

std::istringstream is(s1);
std::string t1, t2;
is &gt;&gt; t1 &gt;&gt; t2;       // ergibt t1 =&gt; &quot;Hallo,&quot; und t2 =&gt; &quot;Welt!&quot;
if (!is)
  throw std::runtime_error(&quot;fehler&quot;);  // einer der extraction-operatoren ging nicht; die streams werfen selbst leider keine Exceptions
</code></pre>
<p>In den Kommentaren habe ich den äquivalenten C-code untergebracht. Ein wesentlicher Unterschied ist auch, daß Du mit den C++-code keine Bufferüberläufe zu befürchten hast.</p>
<p>Du bist schon auf dem richtigen Weg, auf C++ umzusteigen <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>Tntnet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158139</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Fri, 20 Oct 2006 08:38:26 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 08:47:19 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>std::string ist die String-Klasse. Damit kannst Du strcpy, strcat, strlen und co erschlagen. Statt sprintf verwendest Du std::ostringstream. Bei strtok hilft Dir std::istringstream und istream-operatoren oder std::getline.</p>
</blockquote>
<p>Wobei strtok vermutlich etwas mächtiger ist als die stringstreams (die nehmen nur Leerzeichen als Worttrennungen - für andere Zerlegungen (z.B. CSV-Dateien werden an ; getrennt) müsstest du da einiges schrauben. Deshalb solltest du strtok() lieber durch find_first_of() und substr() abbilden.</p>
<blockquote>
<pre><code class="language-cpp">if (!is)
  throw std::runtime_error(&quot;fehler&quot;);  // einer der extraction-operatoren ging nicht; die streams werfen selbst leider keine Exceptions
</code></pre>
</blockquote>
<p>Wenn du wirklich Exceptions benötigst - Streams können auch welche werfen (du mußt es ihnen nur sagen) <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>
<pre><code class="language-cpp">is.exception(ios::failbit);//von jetzt ab wirft der Stream bei Fehlern eine ios_base::failure Exception
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1158146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158146</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 20 Oct 2006 08:47:19 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 09:12:45 GMT]]></title><description><![CDATA[<p>Also gerade im Falle strtok sieht das folgendermaßen aus:</p>
<p>String den ich bekomme:</p>
<p>123457809 Name,Vorname (10/32) 15-20 **Beantragt** Testkommentar bis 40 Zeichen</p>
<p>So.</p>
<p>Die einzelnen stücke brauche ich jetzt, vor allem die Zahlen in der Klammer, die Uhrzeit, Name und die Zahl am Anfang.</p>
<p>ALso gehe ich hin mit Strtok, suche das erste Leerzeichen:<br />
Den String kopieen ich in einen buffer:</p>
<p>char buffer[1024],*p,*p1,*p2,*p3...usw;</p>
<p>strcpy(buffer,String);</p>
<p>//Zahl am Anfang<br />
p=strtok(buffer,&quot; &quot;);<br />
if(p==NULL)throw(&quot;Fehler beim zerhacken des Strings&quot;);</p>
<p>//Name<br />
p1=strtok(NULL,&quot;,&quot;);<br />
if(p1==NULL)throw(&quot;Fehler beim zerhacken des Strings&quot;);</p>
<p>//Vorname<br />
p2=strtok(NULL,&quot; &quot;);<br />
if...</p>
<p>USW...</p>
<p>bis ich alles durch habe und die verschiedenen pointer auf die enstsprechenden Stellen im buffer Zeigen.<br />
Das packen ich dann in HTML usw....</p>
<p>Das ist ein typisches Beispiel.</p>
<p>Denn nur das erste Zeichen finden bringt mir nichts, ich muss den kompletten String systematisch durchsuchen und die einzelnen Teilstücke erst mal behalten und dann weiterverarbeiten.</p>
<p>Wie würde das jetzt mit C++ aussehen?</p>
<p>Mondmann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158161</guid><dc:creator><![CDATA[Mondmann]]></dc:creator><pubDate>Fri, 20 Oct 2006 09:12:45 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 09:51:25 GMT]]></title><description><![CDATA[<p>OK, dann setze ich mal deinen Code um:</p>
<pre><code class="language-cpp">string buffer,p,p1...;  //char buffer[1024],*p,*p1,*p2,*p3...usw;
int pos,apos;

buffer = String;        //strcpy(buffer,String);

//Zahl am Anfang
pos = buffer.find(&quot; &quot;); //p=strtok(buffer,&quot; &quot;);
if(pos==string::npos)   //if(p==NULL)
  throw(&quot;Fehler beim zerhacken des Strings&quot;);
else
  p=buffer.substr(0,pos);

//Name
apos=pos+1;pos=buffer.find(&quot;,&quot;,apos);
                        //p1=strtok(NULL,&quot;,&quot;);
if(apos==string::npos)
  throw(&quot;Fehler beim zerhacken des Strings&quot;);
else
  p1=buffer.substr(apos,pos-apos);

...
</code></pre>
<blockquote>
<p>Denn nur das erste Zeichen finden bringt mir nichts,</p>
</blockquote>
<p>Das nette an find() und Kollegen ist, daß du auch eine Startposition angeben kannst - auf diese Weise suchst du beim nächsten Durchlauf hinter der letzten gefundenen Position weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158190</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 20 Oct 2006 09:51:25 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 09:55:19 GMT]]></title><description><![CDATA[<p>Ich glaube boost bietet auch einiges an Stringoperationen und hat wenn ich mich recht erinnere auch so einen tokenizer. Wenn die Daten komplexer werden ist vielleicht auch spirit interessant, weil man die Daten direkt beim parsen an die variablen binden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158195</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Fri, 20 Oct 2006 09:55:19 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 10:05:11 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a><br />
Total Klasse!</p>
<p>Vielen Herzlichen Dank...wieder ein Schritt weiter<br />
Habe nur noch das Problemchen , daß er string nicht kennt obwohl ich</p>
<p>#include &lt;string&gt;<br />
#include &lt;iostream&gt;</p>
<p>eingebunden habe und using namespace std; angegeben habe (was auch immer das heist)</p>
<p>wenn ich string test; angebe, sagt er:</p>
<blockquote>
<p>Syntaxfehler: Fehlendes ';' vor Bezeichner 'test' und<br />
'test': nichtdeklarierter Bezeichner</p>
</blockquote>
<p>Könnte es daran liegen, daß ich langsam einen ziemlichen C/C++ mischmasch habe?<br />
Aber das sollte ja kein Problem sein, denke ich.</p>
<p>Was fehlt denn da noch?</p>
<p>Mondmann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158197</guid><dc:creator><![CDATA[Mondmann]]></dc:creator><pubDate>Fri, 20 Oct 2006 10:05:11 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 10:01:45 GMT]]></title><description><![CDATA[<p>Bei solchen Dingen gibt es 2 Möglichkeiten (zumindest fallen mir 2 gute ein): reguläre Ausdrücke oder ein handgeschriebener Parser.</p>
<p>Regulare Ausdrücke findest Du beispielsweise in der <a href="http://www.boost.org/" rel="nofollow">Boost-Bibliothek</a> (wobei die Site momentan ein 404 - not found liefert <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="😞"
    /> ). Ein handgeschriebener Parser ist weit aufwendiger aber schneller. Wenn es nicht auf das letzte Quentchen Geschwindigkeit ankommt, nimm reguläre Ausdrücke. Die sind auch wartbarer als was handgeschriebenes.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>: mit dem strtok hast Du nicht ganz recht. Ich habe extra den Verweis auf std::getline(std::istream&amp;, std::string&amp;) gebracht. Das ist die exakte Entsprechung. Dafür hast Du bei den Exceptions bei Streams voll gepunktet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Tntnet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158200</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Fri, 20 Oct 2006 10:01:45 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 10:04:25 GMT]]></title><description><![CDATA[<p>Mondmann schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a><br />
Total Klasse!</p>
<p>Vielen Herzlichen Dank...wieder ein Schritt weiter<br />
Habe nur noch das Problemchen , daß er string nicht kennt obwohl ich</p>
<p>#include &lt;string&gt;<br />
#include &lt;iostream&gt;</p>
<p>eingebunden habe und using namespace std; angegeben habe (was auch immer das heist)</p>
<p>wenn ich string test; angebe, sagt er:</p>
<p>Syntaxfehler: Fehlendes ';' vor Bezeichner 'test' und<br />
'test': nichtdeklarierter Bezeichner</p>
<p>Könnte es daran liegen, daß ich langsam einen ziemlichen C/C++ mischmasch habe?<br />
Aber das sollte ja kein Problem sein, denke ich.</p>
<p>Was fehlt da noch?</p>
<p>Mondmann</p>
</blockquote>
<p>Entweder ergänzt Du nach den includes &quot;using namespace std;&quot; oder Du verwendest voll Qualifizierte Namen, also statt &quot;string&quot; immer &quot;std::string&quot;. Wobei ich persönlich das zweite bevorzuge.</p>
<p>Tntnet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158201</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Fri, 20 Oct 2006 10:04:25 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 10:08:46 GMT]]></title><description><![CDATA[<p>Wenn ich &quot;using namespace std;&quot; einfüge funktionierts nicht.<br />
Bei Deinem 2. Beispiel schon...</p>
<p>Vielen Dank, tolles, hilfreiches Forum hier.</p>
<p>Mondmann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158205</guid><dc:creator><![CDATA[Mondmann]]></dc:creator><pubDate>Fri, 20 Oct 2006 10:08:46 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 10:10:12 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>: mit dem strtok hast Du nicht ganz recht. Ich habe extra den Verweis auf std::getline(std::istream&amp;, std::string&amp;) gebracht. Das ist die exakte Entsprechung.</p>
</blockquote>
<p>Dann versuch' mal, einen Ausdruck wie 'strtok(data,&quot;.,;&quot;);' mit getline() darzustellen (bei getline() kannst du nur ein Trennzeichen angeben).</p>
<blockquote>
<p>Dafür hast Du bei den Exceptions bei Streams voll gepunktet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>Danke für die Blumen <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 />
(tja, ein bisschen was bleibt schon hängen, wenn man sich intensiver mit der Standardlib beschäftigt)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158206</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 20 Oct 2006 10:10:12 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 10:31:37 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>OK, dann setze ich mal deinen Code um:</p>
<pre><code class="language-cpp">string buffer,p,p1...;  //char buffer[1024],*p,*p1,*p2,*p3...usw;
int pos,apos;

buffer = String;        //strcpy(buffer,String);

//Zahl am Anfang
pos = buffer.find(&quot; &quot;); //p=strtok(buffer,&quot; &quot;);
if(pos==string::npos)   //if(p==NULL)
  throw(&quot;Fehler beim zerhacken des Strings&quot;);
else
  p=buffer.substr(0,pos);

//Name
apos=pos+1;pos=buffer.find(&quot;,&quot;,apos);
                        //p1=strtok(NULL,&quot;,&quot;);
if(apos==string::npos)
  throw(&quot;Fehler beim zerhacken des Strings&quot;);
else
  p1=buffer.substr(apos,pos-apos);

...
</code></pre>
<blockquote>
<p>Denn nur das erste Zeichen finden bringt mir nichts,</p>
</blockquote>
<p>Das nette an find() und Kollegen ist, daß du auch eine Startposition angeben kannst - auf diese Weise suchst du beim nächsten Durchlauf hinter der letzten gefundenen Position weiter.</p>
</blockquote>
<p>Bei diesem Beispiel hier..da könnte ich doch das else weglassen, da er nach dem throw eh rausspringt, oder?</p>
<p>Mondmann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158220</guid><dc:creator><![CDATA[Mondmann]]></dc:creator><pubDate>Fri, 20 Oct 2006 10:31:37 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 10:30:15 GMT]]></title><description><![CDATA[<p>Ja, könntest du eigentlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158223</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 20 Oct 2006 10:30:15 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 10:31:56 GMT]]></title><description><![CDATA[<p>Ok.<br />
UND wie kann ich das jetzt darstellbar machen?<br />
Ich meine wenn ich in einem Messagebox:</p>
<pre><code>MessageBox(NULL,p_buf, &quot;Erster Teilstring&quot;, MB_OK);
</code></pre>
<p>ausgebem will, meckert der, daß er std:string nicht in LPCSTR umwandeln kann. Muss ich das machen?<br />
Generell?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158225</guid><dc:creator><![CDATA[Mondmann]]></dc:creator><pubDate>Fri, 20 Oct 2006 10:31:56 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 10:35:53 GMT]]></title><description><![CDATA[<p>std::string hat auch eine Methode c_str(), mit der du auf das unterliegende char-Array zugreifen kannst:</p>
<pre><code class="language-cpp">MessageBox(NULL,p_buf.c_str(), &quot;Erster Teilstring&quot;, MB_OK);
</code></pre>
<p>PS: Im Zuge der UNICODE-Euphorie wäre vielleicht ein &quot;typedef std::basic_string&lt;TCHAR&gt; tstring;&quot; angebracht <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/1158227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158227</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 20 Oct 2006 10:35:53 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 10:40:36 GMT]]></title><description><![CDATA[<p>hmmmm...ich muss als immer wenn ich den String ausgeben will ihn mit c_st() konvertieren???(ich muss ihn ja immer ausgeben)<br />
Kommt mir jetzt etwas umständlich vor....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158229</guid><dc:creator><![CDATA[Mondmann]]></dc:creator><pubDate>Fri, 20 Oct 2006 10:40:36 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 11:04:03 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Du must gar nichts konvertieren, c_str() gibt nur einen Pointer auf das interne char-Array zurück.<br />
Und das must du auch nur dann machen, wenn du einen C-String brauchst. Bei den Standard-Streams aus der STL brauchst du das zum Beispiel nicht, diese verstehen direkt std::string.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158244</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 20 Oct 2006 11:04:03 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 11:12:45 GMT]]></title><description><![CDATA[<p>ok alles klar. Mir fehlt einfach nur noch C++ Grundkenntnisse, es gibt ja genügend tutorials im Internet.</p>
<p>Der größte Vorteil erschließt sich mir dadaurch, da0 ich mich nicht um den Speicher kümmern muss. Ansonsten wird es nicht umbedingt schneller sein..eher langsamer. Das werde ich dann bei weitaus größeren dieser meiner &quot;operationen&quot; schnell merken.</p>
<p>Vielen Dank, Mondmann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158255</guid><dc:creator><![CDATA[Mondmann]]></dc:creator><pubDate>Fri, 20 Oct 2006 11:12:45 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 11:44:30 GMT]]></title><description><![CDATA[<p>Mondmann schrieb:</p>
<blockquote>
<p>...Ansonsten wird es nicht umbedingt schneller sein...</p>
</blockquote>
<p>Ich denke, dass man auch nicht der Performance wegen von C auf C++ wechselt. Schließlich kommt man mit C-Code (den man glücklicherweise ja ebenso in C++ nutzen kann) nahezu beliebig tief auf die technische Ebene runter, auf denen man &quot;optimal optimieren&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="😉"
    /> ) kann.</p>
<p>Es hat sich aber einfach in der Praxis heruasgestellt, dass viel an Ärger und Kosten gar nicht durch das eine oder andere % Performanceabstrich verursacht werden, sondern durch Dinge wie &quot;Strukturierung&quot;. .... wie sonst hätte sich Java etablieren können <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>Wie gesagt: Wo immer das letzte Quentchen an Performance wirklich wichtig ist (und man nicht durch 100 Euro Prozessorkauf 50 Tage Tun-/Testing sparen kann), kann man in C++ immer noch dieselben &quot;Spezialitäten&quot; machen wie unter C.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158282</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 20 Oct 2006 11:44:30 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 12:07:50 GMT]]></title><description><![CDATA[<p>Womit ich ein weiteres Problem hätte.</p>
<p>Die Funktion(nicht von mir) die den Stream an den Webbrowser schickt,ist ne C-Funktion.<br />
Da ich aber jetzt lauter string-Objekte habe müsste ich viel in der Gegend herum konvertieren.ich schätze damit ist alles hinfällig.</p>
<p>Hier die definition:</p>
<pre><code>BOOL (WINAPI * WriteClient)  ( HCONN      ConnID,
                                   LPVOID     Buffer,
                                   LPDWORD    lpdwBytes,
                                   DWORD      dwReserved );
</code></pre>
<p>es geht um die mittleren beiden Argumente.</p>
<p>bisher hatte ich ebenen ein großes C-Array das den komplette HTML COde enthielt.<br />
JEtzt habe ich ein string objekt.</p>
<p>Mit buffer.c_str() lässt er sich nicht abspeisen.<br />
Das 3. Argument hatte infach nur die Länge des C-Strings. (strlen)</p>
<p>So sieht das aus:</p>
<pre><code>pECB_SEND-&gt;WriteClient(pECB_SEND-&gt;ConnID, buffer, &amp;bufsiz, dwReserved);
</code></pre>
<p>Das erste und letzte Argument lasst mal mein Bier sein:-)</p>
<pre><code>DWORD buflen_str;
std::string main1=main

buflen_str=header.length()+footer.length()+menue.length()+top.length()+main1.length();

//bisher
//	char* buffer=(char*)calloc(buflen,sizeof(char*));
//	if(buffer==NULL){throw(&quot;Fehler beim SEND Fehlernummer 347&quot;);}

//jetzt
std::string buffer;

//bisher 	if(!(_snprintf_s(buffer,buflen,_TRUNCATE,&quot;%s%s%s%s%s&quot;,header,top,menue,main, footer)))
	//	throw(&quot;Fehler beim erzeugen des Strings (genehmigung/372)&quot;);

//jetzt
buffer=header+top+menue+main+footer;	

pECB2-&gt;WriteClient(pECB2-&gt;ConnID, buffer, &amp;buflen_str, dwReserved);
</code></pre>
<p>Fehlermeldungen:</p>
<blockquote>
<p>Fehler 10 error C2664: 'BOOL (HCONN,LPVOID,LPDWORD,DWORD)': Konvertierung des Parameters 2 von 'std::string' in 'LPVOID' nicht möglich</p>
</blockquote>
<p>Da es ja ein LP ist, kriege ich es hin, wenn ich &amp;buffer angebe. Nur ist dann nichts mehr drin.<br />
Wenn ich zuvor kontrolliere, ist der Buffer randvoll mit dem korrekten HTML Code.</p>
<p>Wie kriege ich das hin?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158304</guid><dc:creator><![CDATA[Mondmann]]></dc:creator><pubDate>Fri, 20 Oct 2006 12:07:50 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 12:10:17 GMT]]></title><description><![CDATA[<p>Mit &amp;buffer kommst du nur an ein paar Kontrollstrukturen der Klasse. An die tatsächlichen Textdaten kommst du per buffer.c_str().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158317</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 20 Oct 2006 12:10:17 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 12:11:43 GMT]]></title><description><![CDATA[<p>Na ja - natürlich ist das schneller, einen festen Puffer auf den Stack anzulegen. Und noch schneller ist es, wenn ich darauf verzichte, die Puffergrösse zu überprüfen. Das Ergebnis sind zahlreiche Sicherheitslücken durch Pufferüberläufe.</p>
<p>Wenn ich in C genau das implementiere, was ich in C++ habe, ist C nicht schneller. Nur umständlicher.</p>
<p>Man denke nur an dieses einfache Beispiel mit Strings. Statt eines festen Puffers müsste ich zunächst mit malloc so viel Speicher reservieren, wie ich benötige, prüfen, ob die Allokation erfolgreich war und dann mit strcpy meine Daten hinein kopieren. Wenn ich die Funktion verlasse, muß ich dann mit free den Speicher wieder frei geben.</p>
<p>In der Praxis macht man sich mit C nicht die Mühe es so richtig zu machen. C++ macht es uns halt einfach es richtig zu machen. Das Ergebnis sind Programme, die langsamer sind, weil sie richtig sind.</p>
<p>Tntnet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158321</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Fri, 20 Oct 2006 12:11:43 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 12:17:20 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Mit &amp;buffer kommst du nur an ein paar Kontrollstrukturen der Klasse. An die tatsächlichen Textdaten kommst du per buffer.c_str().</p>
</blockquote>
<p>Wie gesagt,das funktioniert leider nicht.<br />
Wenn ich das mit buffer.c_str() mache kommt Fehlermeldung:</p>
<p>Fehler 10 error C2664: 'BOOL (HCONN,LPVOID,LPDWORD,DWORD)': Konvertierung des Parameters 2 von '*<em>const char <em>' in 'LPVOID</em></em>' nicht möglich.</p>
<p>Ich denke auch, daß es so gehen müsste, tuts aber leider nicht...</p>
<p>Woran könnte das liegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158322</guid><dc:creator><![CDATA[Mondmann]]></dc:creator><pubDate>Fri, 20 Oct 2006 12:17:20 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Stringoperationen im Vergleich zu C Stringoperationen, C++Anfänger on Fri, 20 Oct 2006 12:21:45 GMT]]></title><description><![CDATA[<p>An dem verd... const. Wenn du dir ganz sicher bist, daß WriteClient() die übergebenen Daten nicht verändern wird, darfst du das ausnahmsweise casten als &quot;(LPVOID) buffer.c_str()&quot; (aber da mußt du genau wissen, was du machst - der Compiler kontrolliert nämlich jetzt nicht mehr).</p>
<p>(Anmerkung: Wenn WriteClient() tatsächlich in den String schreiben will, kommst du um ein char-Array nicht herum)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1158332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1158332</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 20 Oct 2006 12:21:45 GMT</pubDate></item></channel></rss>