<?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[char array Übergabe läuft falsch]]></title><description><![CDATA[<p>Gleich 2 Probleme: 1. warum wird s t a n d a r t nur als standart dargestellt??</p>
<ol start="2">
<li></li>
</ol>
<p>ich hab folgenden Quellcode:</p>
<p>main:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;string&gt;

using namespace std;

#include &quot;Standart.h&quot;

int main()
{
    Standart standart;
    char *eingabe = new char;
    while(1)
    {
        printf(&quot;Eingabe: &quot;);
        gets(eingabe);
        if(strcmp(eingabe, &quot;exit&quot;) == 0)
            exit(0);
        char *befehl = new char;
        standart.toBefehl(eingabe, befehl);
        puts(befehl);
        printf(&quot;%u\n&quot;, strlen(befehl));
        delete befehl;
    }
    delete eingabe;
    return 0;
}
</code></pre>
<p>dann noch die standart.h und standart.cpp:</p>
<pre><code class="language-cpp">//standart.h

#ifndef STANDART_H
#define STANDART_H

class Standart
{
    public:
        void toBefehl(const char*, char*);
    protected:
    private:
};

#endif // STANDART_H

//standart.cpp

#include &quot;Standart.h&quot;

void Standart::toBefehl(const char* eingabe, char *befehl)
{
    int i = 0;
    while(eingabe[i] != ' ' &amp;&amp; eingabe[i] != char(0))
        i++;
    for(int j = 0; j &lt; i; j++)
        befehl[j] = eingabe[j];
}
</code></pre>
<p>dieser Quellcode soll mir das erste Wort aus einem Zeichenstring rausfiltern. Das macht es, indem es alles bis zum ersten Leerzeichen ausliest und in einer Variablen speichert. Aber warum sind jetzt die Ausgaben von</p>
<pre><code class="language-cpp">&quot;hello world&quot;
</code></pre>
<p>5 Zeichen (was ja richtig ist):</p>
<pre><code class="language-cpp">&quot;hello&quot;
</code></pre>
<p>aber die von</p>
<pre><code class="language-cpp">&quot;auch jetzt?&quot;
</code></pre>
<p>ebenfalls 5 Zeichen lang und (bei mir) wurde einfach ein minus hinzugefügt:</p>
<pre><code class="language-cpp">&quot;auch-&quot;
</code></pre>
<p>danke für eure Antworten!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/308267/char-array-übergabe-läuft-falsch</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 02:03:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/308267.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Sep 2012 18:21:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to char array Übergabe läuft falsch on Wed, 19 Sep 2012 18:21:04 GMT]]></title><description><![CDATA[<p>Gleich 2 Probleme: 1. warum wird s t a n d a r t nur als standart dargestellt??</p>
<ol start="2">
<li></li>
</ol>
<p>ich hab folgenden Quellcode:</p>
<p>main:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;string&gt;

using namespace std;

#include &quot;Standart.h&quot;

int main()
{
    Standart standart;
    char *eingabe = new char;
    while(1)
    {
        printf(&quot;Eingabe: &quot;);
        gets(eingabe);
        if(strcmp(eingabe, &quot;exit&quot;) == 0)
            exit(0);
        char *befehl = new char;
        standart.toBefehl(eingabe, befehl);
        puts(befehl);
        printf(&quot;%u\n&quot;, strlen(befehl));
        delete befehl;
    }
    delete eingabe;
    return 0;
}
</code></pre>
<p>dann noch die standart.h und standart.cpp:</p>
<pre><code class="language-cpp">//standart.h

#ifndef STANDART_H
#define STANDART_H

class Standart
{
    public:
        void toBefehl(const char*, char*);
    protected:
    private:
};

#endif // STANDART_H

//standart.cpp

#include &quot;Standart.h&quot;

void Standart::toBefehl(const char* eingabe, char *befehl)
{
    int i = 0;
    while(eingabe[i] != ' ' &amp;&amp; eingabe[i] != char(0))
        i++;
    for(int j = 0; j &lt; i; j++)
        befehl[j] = eingabe[j];
}
</code></pre>
<p>dieser Quellcode soll mir das erste Wort aus einem Zeichenstring rausfiltern. Das macht es, indem es alles bis zum ersten Leerzeichen ausliest und in einer Variablen speichert. Aber warum sind jetzt die Ausgaben von</p>
<pre><code class="language-cpp">&quot;hello world&quot;
</code></pre>
<p>5 Zeichen (was ja richtig ist):</p>
<pre><code class="language-cpp">&quot;hello&quot;
</code></pre>
<p>aber die von</p>
<pre><code class="language-cpp">&quot;auch jetzt?&quot;
</code></pre>
<p>ebenfalls 5 Zeichen lang und (bei mir) wurde einfach ein minus hinzugefügt:</p>
<pre><code class="language-cpp">&quot;auch-&quot;
</code></pre>
<p>danke für eure Antworten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252788</guid><dc:creator><![CDATA[Clundsch]]></dc:creator><pubDate>Wed, 19 Sep 2012 18:21:04 GMT</pubDate></item><item><title><![CDATA[Reply to char array Übergabe läuft falsch on Wed, 19 Sep 2012 18:26:56 GMT]]></title><description><![CDATA[<p>Clundsch schrieb:</p>
<blockquote>
<p>Gleich 2 Probleme: 1. warum wird s t a n d a r t nur als stan**** dargestellt??</p>
</blockquote>
<p>Weil Deutsch eine genauso schwere Sprache ist, wie C++.</p>
<p>Wieso benutzt du nicht std::string, std::cout ... ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252789</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Wed, 19 Sep 2012 18:26:56 GMT</pubDate></item><item><title><![CDATA[Reply to char array Übergabe läuft falsch on Wed, 19 Sep 2012 18:36:30 GMT]]></title><description><![CDATA[<p>auch wenns jetzt krass wirkt, aber ich achte auf die Dateigröße :o<br />
und iostream ist einfach wahnsinnig groß. leider ändert das nix am ergebnis <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="😞"
    /></p>
<p>EDIT: und ich bin zu blöd um string mit einzubauen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
der gibt mir dann nen fehler bei strcmp</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252793</guid><dc:creator><![CDATA[Clundsch]]></dc:creator><pubDate>Wed, 19 Sep 2012 18:36:30 GMT</pubDate></item><item><title><![CDATA[Reply to char array Übergabe läuft falsch on Wed, 19 Sep 2012 18:45:16 GMT]]></title><description><![CDATA[<p>für befehl wird nur ein Byte reserviert, und dann wird lustig dahinter rumgeschrieben.</p>
<p>Edit:<br />
Sieh zu, dass Du mit string klar kommst, dann passiert sowas auch nicht.</p>
<p>Zu 1. Warum s t a n d a r t zensiert wird, weiß ich auch nicht, wo es doch eine Möglichkeit, sich hinzustellen, beschreiben soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252800</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Wed, 19 Sep 2012 18:45:16 GMT</pubDate></item><item><title><![CDATA[Reply to char array Übergabe läuft falsch on Wed, 19 Sep 2012 18:44:20 GMT]]></title><description><![CDATA[<p>Belli schrieb:</p>
<blockquote>
<p>für befehl wird nur ein Byte reserviert, und dann wird lustig dahinter rumgeschrieben.</p>
</blockquote>
<p>wie kann ich das verhindern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252802</guid><dc:creator><![CDATA[Clundsch]]></dc:creator><pubDate>Wed, 19 Sep 2012 18:44:20 GMT</pubDate></item><item><title><![CDATA[Reply to char array Übergabe läuft falsch on Wed, 19 Sep 2012 18:46:00 GMT]]></title><description><![CDATA[<p>Was verhindern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252804</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Wed, 19 Sep 2012 18:46:00 GMT</pubDate></item><item><title><![CDATA[Reply to char array Übergabe läuft falsch on Wed, 19 Sep 2012 18:47:16 GMT]]></title><description><![CDATA[<p>dass lustig dahinter rumgeschrieben wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252805</guid><dc:creator><![CDATA[Clundsch]]></dc:creator><pubDate>Wed, 19 Sep 2012 18:47:16 GMT</pubDate></item><item><title><![CDATA[Reply to char array Übergabe läuft falsch on Wed, 19 Sep 2012 18:47:37 GMT]]></title><description><![CDATA[<p>Ausserdem wird kein Nullbyte in den String, auf den befehl zeigt, geschrieben. Also nochmal: nimm string, oder programmiere in C.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252806</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Wed, 19 Sep 2012 18:47:37 GMT</pubDate></item><item><title><![CDATA[Reply to char array Übergabe läuft falsch on Wed, 19 Sep 2012 18:48:45 GMT]]></title><description><![CDATA[<p>Clundsch schrieb:</p>
<blockquote>
<p>dass lustig dahinter rumgeschrieben wird.</p>
</blockquote>
<p>Indem Du nur befehl[0] beschreibst. befehl[1] gehört Dir ja schon nicht mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252808</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Wed, 19 Sep 2012 18:48:45 GMT</pubDate></item><item><title><![CDATA[Reply to char array Übergabe läuft falsch on Wed, 19 Sep 2012 18:55:42 GMT]]></title><description><![CDATA[<p>du mischt C und C++.<br />
printf, new, delete,...</p>
<p>Entscheide dich für eine Sprache.<br />
Standard heiß es übrigens.</p>
<p>Außerdem empfehle ich dir dringend die Benutzung von std::string (also C++).<br />
Dann passieren auch nicht so Fehler wie schreiben in einen Speicherbereich, der einem nicht gehört. Du reservierst exakt 1*sizeof(char), und dann schreibst du x Zeichen dorthin. Reservier da mal lieber mehr, dafür gibts new[], oder aber du steigst auf Klassen um, die sich selbst um den Speicher kümmern, wie eben std::string.</p>
<p>Als Anfänger sollte man sich nicht um möglichst kleine Binärdateien kümmern, sondern um möglichst korrekten Code!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252817</guid><dc:creator><![CDATA[ewrwer]]></dc:creator><pubDate>Wed, 19 Sep 2012 18:55:42 GMT</pubDate></item><item><title><![CDATA[Reply to char array Übergabe läuft falsch on Wed, 19 Sep 2012 18:59:35 GMT]]></title><description><![CDATA[<blockquote>
<p>EDIT: und ich bin zu blöd um string mit einzubauen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
der gibt mir dann nen fehler bei strcmp</p>
</blockquote>
<p>das liegt daran, dass sich strcmp um die alten C Strings kümmert, und nicht um die &quot;neuen&quot; C++ std:string's. Dafür gibts die Methode compare.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252818</guid><dc:creator><![CDATA[ewrwer]]></dc:creator><pubDate>Wed, 19 Sep 2012 18:59:35 GMT</pubDate></item><item><title><![CDATA[Reply to char array Übergabe läuft falsch on Wed, 19 Sep 2012 19:22:02 GMT]]></title><description><![CDATA[<p>gut. auf string bin ich jetzt umgestiegen. jetzt hab ich den code:</p>
<pre><code class="language-cpp">int main()
{
    Standart standart;
    string eingabe;
    while(1)
    {
        cin&gt;&gt;eingabe;
        if(eingabe == &quot;exit&quot;)
            exit(0);
        string befehl = eingabe;
        befehl.erase( strchr(eingabe, ' ') , eingabe.end());
    }

    return 0;
}
</code></pre>
<p>und den fehler:</p>
<pre><code>error: cannot convert 'std::string' to 'const char*' for argument '1' to 'char* strchr(const char*, int)'
</code></pre>
<p>und der zeigt auf die Zeile mit dem strchr</p>
<p>jetzt bin ich total verwirrt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> was soll ich machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252824</guid><dc:creator><![CDATA[Clundsch]]></dc:creator><pubDate>Wed, 19 Sep 2012 19:22:02 GMT</pubDate></item><item><title><![CDATA[Reply to char array Übergabe läuft falsch on Wed, 19 Sep 2012 19:51:09 GMT]]></title><description><![CDATA[<p>Natürlich kannst du nicht einfach C-Stringfunktionen auf deinen <code>std::string</code> anwenden. Schaue mal auf <a href="http://www.cppreference.com" rel="nofollow">www.cppreference.com</a> an, welche Methoden ein <code>std::string</code> so anbietet...</p>
<p>Übrigens: <code>std::exit()</code> ist schlecht, da es nicht sauber aufräumt. Gerade in <code>main()</code> kannst du sowieso ein <code>return</code> benutzen. Ausserdem dürfen Typen und ihre Variablen nicht gleich heissen, wenn sie im gleichen Scope verwendet werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252835</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 19 Sep 2012 19:51:09 GMT</pubDate></item><item><title><![CDATA[Reply to char array Übergabe läuft falsch on Wed, 19 Sep 2012 20:02:01 GMT]]></title><description><![CDATA[<p>ja, das mit dem return hab ich ganz vergessen.<br />
und ich Idiot hab aus Versehen bei den c-strings nachgeguckt anstatt bei den c++ strings <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
allerdings komm ich einfach nicht weiter. ich will lediglich einen teil aus dem ersten in den zweiten string kopieren.<br />
genauer gesagt will ich alles aus dem ersten string bis zum ersten Leerzeichen in den zweiten string kopieren. wie macht man das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252839</guid><dc:creator><![CDATA[Clundsch]]></dc:creator><pubDate>Wed, 19 Sep 2012 20:02:01 GMT</pubDate></item><item><title><![CDATA[Reply to char array Übergabe läuft falsch on Wed, 19 Sep 2012 20:15:53 GMT]]></title><description><![CDATA[<p>Zuerst mit <code>std::string::find()</code> (oder einer der 7 Varianten) nach dem Leerzeichen suchen und dessen Index merken. Somit kennst du das Intervall der Zeichen, die du kopieren musst (nämlich <code>[0,index[</code> ). Zum Kopieren hast du verschiedene Möglichkeiten, unter Anderem:</p>
<ul>
<li><code>std::copy()</code> , wenn du genau gleich viele Zeichen des 2. Strings überschreiben willst (Länge von String 2 bleibt gleich)</li>
<li><code>std::string::insert()</code> , wenn die Zeichen eingefügt werden sollen (Länge 2 += Länge 1)</li>
<li><code>std::string::assign()</code> oder <code>std::string::operator=</code> mit <code>std::string::substr()</code> , wenn der ganze 2. String neu zugewiesen werden soll (Länge 2 = Länge 1)</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/2252845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252845</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 19 Sep 2012 20:15:53 GMT</pubDate></item><item><title><![CDATA[Reply to char array Übergabe läuft falsch on Wed, 19 Sep 2012 20:21:40 GMT]]></title><description><![CDATA[<p>Clundsch schrieb:</p>
<blockquote>
<p>genauer gesagt will ich alles aus dem ersten string bis zum ersten Leerzeichen in den zweiten string kopieren. wie macht man das?</p>
</blockquote>
<p>Zuerst stellst Du fest, an welcher Position das Leerzeichen ist. Dafür gibts die Methode<br />
std::string::find<br />
oder<br />
std::string::find_first_of</p>
<p>Dann schneidest Du den entsprechenden Teilstring heraus und weist ihn dem neuen String zu, dafür bietet string die Methode substr.</p>
<p>Also etwa:</p>
<pre><code class="language-cpp">string alterString(&quot;hallo Duda&quot;);
size_t pos = alterString.find(' ');
string neuerString = alterString.substr(0, pos);
</code></pre>
<p>einfach mal hier:<br />
<a href="http://cplusplus.com/reference/string/string/" rel="nofollow">http://cplusplus.com/reference/string/string/</a><br />
nachsehen, was alles so angeboten wird.</p>
<p>Edit:<br />
Nach dem find sollte man natürlich zuerst prüfen, ob überhaupt erfolgreich gesucht wurde und dementsprechend reagieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252846</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Wed, 19 Sep 2012 20:21:40 GMT</pubDate></item><item><title><![CDATA[Reply to char array Übergabe läuft falsch on Wed, 19 Sep 2012 20:23:56 GMT]]></title><description><![CDATA[<p>Belli schrieb:</p>
<blockquote>
<p>einfach mal hier:<br />
<a href="http://cplusplus.com/reference/string/string/" rel="nofollow">http://cplusplus.com/reference/string/string/</a><br />
nachsehen, was alles so angeboten wird.</p>
</blockquote>
<p>ja da lese ich schon die ganze zeit fleiß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="🙂"
    /><br />
danke, ich habs mir bisher nicht so zusammenreimen können, war zwischenzeitlich aber nah dran <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2252848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252848</guid><dc:creator><![CDATA[Clundsch]]></dc:creator><pubDate>Wed, 19 Sep 2012 20:23:56 GMT</pubDate></item></channel></rss>