<?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 vergleichen!]]></title><description><![CDATA[<p>Hi,<br />
Ich habe so ein Programm in dem der User wie in einer shell befehle eingeben kann!<br />
Ich werte die eingabe so aus:</p>
<pre><code>scanf(&quot;%s&quot;,&amp;befehl);
 split(befehl,&quot; &quot;,com1,com2);
if(strcmp(com1.c_str(), &quot;help&quot;) == 0)
{ /blablabla
} else { printf(&quot;command not found&quot;);
</code></pre>
<p>Die Funktion split trennt den string befehl einfach bei dem leerzeichen in com1 und com2 auf!<br />
so wenn ich nun help eingebe stürzt das programm ab, auch wenn garnichts in der klammer gemacht wird!<br />
Gebe ich einen nichtvorhandenen befehel ein wird auch wie oben &quot;command not found&quot; ausgegeben. Aber warum stürzt das programm ab wenn ich einen Befehl eingebe?<br />
Der Compiler bringt keine Fehlermeldung liegt es etwa darran das ich diese Funktion als thread starte?<br />
Ich starte die Funktion so:</p>
<pre><code>CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)eingabe, 0, 0, 0);
</code></pre>
<p>MFG ReduX</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/191712/string-vergleichen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 03:20:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/191712.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 05 Sep 2007 18:39:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to String vergleichen! on Wed, 05 Sep 2007 18:39:12 GMT]]></title><description><![CDATA[<p>Hi,<br />
Ich habe so ein Programm in dem der User wie in einer shell befehle eingeben kann!<br />
Ich werte die eingabe so aus:</p>
<pre><code>scanf(&quot;%s&quot;,&amp;befehl);
 split(befehl,&quot; &quot;,com1,com2);
if(strcmp(com1.c_str(), &quot;help&quot;) == 0)
{ /blablabla
} else { printf(&quot;command not found&quot;);
</code></pre>
<p>Die Funktion split trennt den string befehl einfach bei dem leerzeichen in com1 und com2 auf!<br />
so wenn ich nun help eingebe stürzt das programm ab, auch wenn garnichts in der klammer gemacht wird!<br />
Gebe ich einen nichtvorhandenen befehel ein wird auch wie oben &quot;command not found&quot; ausgegeben. Aber warum stürzt das programm ab wenn ich einen Befehl eingebe?<br />
Der Compiler bringt keine Fehlermeldung liegt es etwa darran das ich diese Funktion als thread starte?<br />
Ich starte die Funktion so:</p>
<pre><code>CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)eingabe, 0, 0, 0);
</code></pre>
<p>MFG ReduX</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359698</guid><dc:creator><![CDATA[ReduX]]></dc:creator><pubDate>Wed, 05 Sep 2007 18:39:12 GMT</pubDate></item><item><title><![CDATA[Reply to String vergleichen! on Wed, 05 Sep 2007 18:53:37 GMT]]></title><description><![CDATA[<p>1. Wenn du C++ benutzt, benutz doch std::string auch für die eingabe:</p>
<pre><code class="language-cpp">std::string eingabe;
std::getline(cin, eingabe);  /7 eine zeile von der tastatur lesen

std::string cmd;

size_t f = eingabe.find(&quot; &quot;);
if(f != eingabe.npos)
  cmd = eingabe.substr(0, f);
else
  cmd = eingabe;

// in cmd steht jetzt das erste wort der zeile
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1359707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359707</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Wed, 05 Sep 2007 18:53:37 GMT</pubDate></item><item><title><![CDATA[Reply to String vergleichen! on Wed, 05 Sep 2007 19:25:43 GMT]]></title><description><![CDATA[<p>Hi,<br />
Bringt nichts stürzt trozdem ab!<br />
Und möchte auch wenns möglich ist meine Variante beibehalten!</p>
<p>MFG ReduX</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359719</guid><dc:creator><![CDATA[ReduX]]></dc:creator><pubDate>Wed, 05 Sep 2007 19:25:43 GMT</pubDate></item><item><title><![CDATA[Reply to String vergleichen! on Wed, 05 Sep 2007 19:32:40 GMT]]></title><description><![CDATA[<p>Nimm die C++ Variante!<br />
Welchen Typ hat denn befehl?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359728</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 05 Sep 2007 19:32:40 GMT</pubDate></item><item><title><![CDATA[Reply to String vergleichen! on Wed, 05 Sep 2007 20:15:40 GMT]]></title><description><![CDATA[<p>Hi,<br />
Also befehl ist ein string.</p>
<p>MFG ReduX</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359765</guid><dc:creator><![CDATA[ReduX]]></dc:creator><pubDate>Wed, 05 Sep 2007 20:15:40 GMT</pubDate></item><item><title><![CDATA[Reply to String vergleichen! on Thu, 06 Sep 2007 07:45:35 GMT]]></title><description><![CDATA[<p>Da kannst du scanf doch gar nicht verwenden. Du schreibst dann irgendwo in die Klasseninstanz.<br />
Welche Signatur hat denn split? Ist das eine selbst geschrieben Funktion?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359933</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 06 Sep 2007 07:45:35 GMT</pubDate></item><item><title><![CDATA[Reply to String vergleichen! on Thu, 06 Sep 2007 08:00:11 GMT]]></title><description><![CDATA[<p>ReduX schrieb:</p>
<blockquote>
<p>Hi,<br />
Bringt nichts stürzt trozdem ab!<br />
...</p>
</blockquote>
<p>Glaub' ich nicht (dass Maxi's Source einen Absturz verursacht) !</p>
<p>Ich selbst würde sowieso &quot;streamen&quot; - entweder direkt von cin oder (wenn man die Zeilenstruktur beibehalten möchte) mittels istringstream. Vorteil: Beliebig flexibel, sicher und dabei kurz und übersichtlich (kein &quot;Suchen nach Leerzeichen&quot;).</p>
<pre><code class="language-cpp">vector&lt;string&gt; cmd;
string eingabe;

// Version 1: direkt von cin
while(cin &gt;&gt; eingabe) cmd.push_back(eingabe); 

// oder Version2: Zeilenweise via istringstream
std::getline(cin, eingabe);
istringstream in(eingabe);
while(in &gt;&gt; eingabe) cmd.push_back(eingabe); 

// in cmd[i] steht das i. Token drin
</code></pre>
<p>Mit &quot;Deiner Variante&quot; wirst Du NIE sicherstellen können, dass jemand mehr Zeichen eingibt (sei es aus Versehen oder absichtlich), als befehl Zeichen hat oder den richtigen Typ oder .....<br />
Kurz gesagt: scanf() hat überhaupt keinen Vorteil aber einen Haufen Nachteile.</p>
<p>BTW: &quot;befehl ist ein String&quot; meint was ? &quot; <code>char befehl[100];</code> &quot; oder &quot; <code>std::string befehl;</code> &quot; ? Bei Letzterem ist vollkommen klar, warum<br />
a) Dir Dein Programm abstürzt und<br />
b) Du unbedingt eine typsichere Variante (wie von Maxi oder mir vorgeschlagen) verwenden solltest.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359937</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 06 Sep 2007 08:00:11 GMT</pubDate></item></channel></rss>