<?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[Strings in C++]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe mal ein paar Fragen zu strings bzw. chars in C++.</p>
<p>Ich habe z.b. dieses in einer Klasse in der header-datei:</p>
<pre><code class="language-cpp">private:
	char *marke;
</code></pre>
<p>Dazu mache ich einen Konstruktor:</p>
<pre><code class="language-cpp">public:
	PKW(char = &quot;Mercedes&quot;, unsigned long = 0, unsigned int = 100);
</code></pre>
<p>So, das funktioniert schon mal nicht! Ich weiß aber nicht warum.</p>
<p>Dazu kommt noch, dass ich nicht weiß, wie ich jetzt dem char eine Wort zuweise.</p>
<p>Bei der Funktiondefinition in der eigentlichen .cpp habe ich dann z.b. sowas:</p>
<pre><code class="language-cpp">PKW::PKW(char a_name, unsigned long a_nr, unsigned int a_lst)
{
	strcpy(marke,a_name);
	fgstnr=a_nr;
	leistung=a_lst;

	cout &lt;&lt; &quot;Pkw der Marke &quot;&lt;&lt; marke
		&lt;&lt; &quot; mit Fahrgestellnummer &quot; &lt;&lt; fgstnr
		&lt;&lt; &quot; und Leistung &quot;&lt;&lt; leistung
		&lt;&lt; &quot; erzeugt\n&quot;;
}
</code></pre>
<p>Gibt alles Fehler. Ich weiß einfach nicht, wie ich mit chars bzw. strings umgehen soll.</p>
<p>Das hier:</p>
<pre><code class="language-cpp">char *marke;
</code></pre>
<p>ist doch ein Zeiger auf einen String bzw. auf das erste Zeichen eines Char-Array, oder?! Woher weiß man wieviel Zeichen es aufnehmen kann?</p>
<p>Danke im vorraus</p>
<p>gruß sheddy</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/197407/strings-in-c</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 06:49:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/197407.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 10 Nov 2007 09:31:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Strings in C++ on Sat, 10 Nov 2007 09:31:17 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe mal ein paar Fragen zu strings bzw. chars in C++.</p>
<p>Ich habe z.b. dieses in einer Klasse in der header-datei:</p>
<pre><code class="language-cpp">private:
	char *marke;
</code></pre>
<p>Dazu mache ich einen Konstruktor:</p>
<pre><code class="language-cpp">public:
	PKW(char = &quot;Mercedes&quot;, unsigned long = 0, unsigned int = 100);
</code></pre>
<p>So, das funktioniert schon mal nicht! Ich weiß aber nicht warum.</p>
<p>Dazu kommt noch, dass ich nicht weiß, wie ich jetzt dem char eine Wort zuweise.</p>
<p>Bei der Funktiondefinition in der eigentlichen .cpp habe ich dann z.b. sowas:</p>
<pre><code class="language-cpp">PKW::PKW(char a_name, unsigned long a_nr, unsigned int a_lst)
{
	strcpy(marke,a_name);
	fgstnr=a_nr;
	leistung=a_lst;

	cout &lt;&lt; &quot;Pkw der Marke &quot;&lt;&lt; marke
		&lt;&lt; &quot; mit Fahrgestellnummer &quot; &lt;&lt; fgstnr
		&lt;&lt; &quot; und Leistung &quot;&lt;&lt; leistung
		&lt;&lt; &quot; erzeugt\n&quot;;
}
</code></pre>
<p>Gibt alles Fehler. Ich weiß einfach nicht, wie ich mit chars bzw. strings umgehen soll.</p>
<p>Das hier:</p>
<pre><code class="language-cpp">char *marke;
</code></pre>
<p>ist doch ein Zeiger auf einen String bzw. auf das erste Zeichen eines Char-Array, oder?! Woher weiß man wieviel Zeichen es aufnehmen kann?</p>
<p>Danke im vorraus</p>
<p>gruß sheddy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400732</guid><dc:creator><![CDATA[sheddy]]></dc:creator><pubDate>Sat, 10 Nov 2007 09:31:17 GMT</pubDate></item><item><title><![CDATA[Reply to Strings in C++ on Sat, 10 Nov 2007 09:56:36 GMT]]></title><description><![CDATA[<p>Entweder du schaust dir nochmal die Grundlagen zu arrays an oder du verwendest std::string und std::vector. Da gibts die Länge/Größe usw. kostenlos<sup>1*</sup> dazu.</p>
<p>~1* Angebot gilt nur so lange der Vorrat reicht.~</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400739</guid><dc:creator><![CDATA[Verkäufer]]></dc:creator><pubDate>Sat, 10 Nov 2007 09:56:36 GMT</pubDate></item><item><title><![CDATA[Reply to Strings in C++ on Sat, 10 Nov 2007 10:07:05 GMT]]></title><description><![CDATA[<p>Ich kann die Grundlagen.</p>
<p>Aber ich tue mich mit &quot;char *marke&quot; schwer.<br />
Bin neu in C++!<br />
Wie bekomme ich dort einen String rein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400744</guid><dc:creator><![CDATA[sheddy]]></dc:creator><pubDate>Sat, 10 Nov 2007 10:07:05 GMT</pubDate></item><item><title><![CDATA[Reply to Strings in C++ on Sat, 10 Nov 2007 10:18:24 GMT]]></title><description><![CDATA[<p>char* marke ist ein Zeiger, richtig. Wieviel Zeichen es aufnehmen kann, hängt davon ab, wieviel Speicher da dafür vom Betriebssystem anforderst. Weil ein Zeiger zeigt ja auf einen Speicherbereich. Das macht man mittels new.<br />
<a href="http://tutorial.schornboeck.net/dyn_speicher.htm" rel="nofollow">http://tutorial.schornboeck.net/dyn_speicher.htm</a><br />
Dieser Artikel kann dir hier weiterhelfen.</p>
<p>Im Fall deines Konstruktors:</p>
<pre><code class="language-cpp">PKW(char = &quot;Mercedes&quot;, unsigned long = 0, unsigned int = 100);
</code></pre>
<p>Kann nicht gehen, weil char nur ein einzelnes Zeichen ist.<br />
So wärs richtig:</p>
<pre><code class="language-cpp">PKW(char* _marke = &quot;Mercedes&quot;, unsigned long a= 0, unsigned int b= 100)
{
   int memory_size =sizeof(char)*strlen(_marke);
   marke = new char[memory_size];
   strcpy(marke, _marke);
}

// Den speicher müssen wir beim beenden auch löschen
PKW::~PKW()
{
  delete [] marke;
}
</code></pre>
<p>Wir arbeiten aber mit C++:</p>
<pre><code class="language-cpp">class PKW{

std::string marke;

PKW(std::string _marke = &quot;Mercedes&quot;, unsigned long a = 0, unsigned int b=100)
{
  marke = _marke;
}
}
</code></pre>
<p>edit bevor nen Schlaumeier kommt:</p>
<pre><code class="language-cpp">class PKW{

std::string marke;

PKW(std::string _marke = &quot;Mercedes&quot;, unsigned long a = 0, unsigned int b=100) : marke(_marke)
{

}
}
</code></pre>
<p>So gehts auch, per initialisierungsliste <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 />
rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400747</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sat, 10 Nov 2007 10:18:24 GMT</pubDate></item><item><title><![CDATA[Reply to Strings in C++ on Sat, 10 Nov 2007 10:18:00 GMT]]></title><description><![CDATA[<p>sheddy schrieb:</p>
<blockquote>
<pre><code class="language-cpp">PKW(char = &quot;Mercedes&quot;, unsigned long = 0, unsigned int = 100);
</code></pre>
</blockquote>
<p>Sowas hab ich noch nie gesehen, kompiliert das wirklich <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="😕"
    /></p>
<p>sheddy schrieb:</p>
<blockquote>
<p>Das hier:</p>
<pre><code class="language-cpp">char *marke;
</code></pre>
<p>ist doch ein Zeiger auf einen String bzw. auf das erste Zeichen eines Char-Array, oder?! Woher weiß man wieviel Zeichen es aufnehmen kann?</p>
</blockquote>
<p>Richtig, das ist ein Zeiger auf einen Char oder mehrere Chars. Das Ding ist, dass es eben nur ein Zeiger ist, der so halt erstmal auf garnix zeigt. Damit du &quot;hinter dem Zeiger&quot; auch sinnvoll Zeichen speichern kannst, muss der Zeiger irgendwohin zeigen, wo auch Speicherplatz für deine Zeichen reserviert ist. Das macht man normalerweise mit &quot;new&quot;. Damit reserviert man ein Stück Speicher, die Funktion &quot;new&quot; gibt dabei den Zeiger auf den Speicher zurück. Deinen Zeiger kannst du dann auf diesen Bereich zeigen lassen und schon kannst du Zeichen in den Speicher beim Zeiger schreiben, bzw daraus lesen.<br />
Mit &quot;new char [100]&quot; reservierst du Platz für 100 Zeichen, du musst dir dabei halt immer selber merken, wieviel Platz du zur Verfügung hast. Mit &quot;new char&quot; reservierst du nur Platz für ein einzelnes Zeichen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1400749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400749</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 10 Nov 2007 10:18:00 GMT</pubDate></item><item><title><![CDATA[Reply to Strings in C++ on Sat, 10 Nov 2007 10:43:03 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;cstring&gt; // std::strlen, std::strcpy
#include &lt;iostream&gt; // std::cout

PKW::PKW(const char* name, unsigned long nr, unsigned int lst) : fgstnr(nr), leistung(lst)
{
    marke = new char[std::strlen(name) + 1];
    std::strcpy(marke, name);

    std::cout &lt;&lt; &quot;PKW der Marke &quot; &lt;&lt; marke
        &lt;&lt; &quot; mit Fahrgestellnummer &quot; &lt;&lt; fgstnr
        &lt;&lt; &quot; und Leistung &quot;&lt;&lt; leistung
        &lt;&lt; &quot; erzeugt!&quot; &lt;&lt; std::endl;
}

PKW::~PKW() { delete [] marke; }
</code></pre>
<p>wenn du wirklich mit char-Array's arbeiten willst <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="😛"
    /> Das kannst du, wie hier schon erwähnt wurde, aber viel einfacher mit der Klasse std::string bekommen <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>@Scorcher24:</p>
<pre><code class="language-cpp">PKW(char* _marke = &quot;Mercedes&quot;, unsigned long a= 0, unsigned int b= 100)
{
   int memory_size =sizeof(char)*strlen(_marke);
   marke = new char[memory_size];
   strcpy(marke, _marke);
}
</code></pre>
<p>Ehm deine Berechnung ist etwas merkwürdig. Das sizeof(char) hat da NICHTS zu suchen! Das sizeof(char) steckt schon in new <strong>char</strong> mit drin.<br />
Des weiteren sollte _marke const sein ... typisches Merkmal einer schlechten Bibliothek. Ehm und ich hab noch keine negative Speichergröße gefunden, du?</p>
<pre><code class="language-cpp">class PKW{

std::string marke;

PKW(std::string _marke = &quot;Mercedes&quot;, unsigned long a = 0, unsigned int b=100) : marke(_marke)
{

}
}
</code></pre>
<p>Hmm ... also das rum kopieren ist äußerst unschön <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="😛"
    /> C++ kennt Referenzen. Dann nur so als kleiner Hinweiß: du kannst auch einfach den Parameter marke (ohne führendes _) nenne. Der weiß was der da tun muss <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 />
Achja. So wirst du wenig Spaß beim erstellen von Instanzen deiner Klasse bekommen. Default-Privacy.</p>
<pre><code class="language-cpp">#include &lt;string&gt;

class PKW
{
    std::string m_marke;
    unsigned long m_fgstnr;
    unsigned int m_leistung;

public:
    PKW(std::string const&amp; marke = &quot;Mercedes&quot;, unsigned long fgstnr = 0, unsigned int leistung = 100) : m_marke(marke), m_fgstnr(fgsnr), m_leistung(leistung) {}
};
</code></pre>
<p>So hat das ganze auch Stil <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="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400765</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sat, 10 Nov 2007 10:43:03 GMT</pubDate></item><item><title><![CDATA[Reply to Strings in C++ on Sat, 10 Nov 2007 10:49:21 GMT]]></title><description><![CDATA[<blockquote>
<p>Des weiteren sollte _marke const sein ... typisches Merkmal einer schlechten Bibliothek. Ehm und ich hab noch keine negative Speichergröße gefunden, du?</p>
</blockquote>
<p>Was meinst du mit negativen Speichergrößen??<br />
Und wegen const... ich hätte es auch const gemacht, ich hab nur an dem orientiert, was der TE geliefert hat....</p>
<blockquote>
<p>Das sizeof(char) hat da NICHTS zu suchen! Das sizeof(char) steckt schon in new char mit drin.</p>
</blockquote>
<p>Na gut..</p>
<blockquote>
<p>Achja. So wirst du wenig Spaß beim erstellen von Instanzen deiner Klasse bekommen. Default-Privacy.</p>
</blockquote>
<p>Jetzt häng dich halt an dem fehlenden public auf omg, wenn man hier mal kurz ein Beispiel reintippt. Das sollte jeder der hier fragt, automatisch wissen, wann private und public zum Einsatz kommen, ausser man fragt explizit danach. Aber das hab ich in diesem Board eh schon gemerkt, dass man auf so Kleinigkeiten gern rumreitet <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=":\"
      alt="😕"
    /><br />
rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400772</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sat, 10 Nov 2007 10:49:21 GMT</pubDate></item><item><title><![CDATA[Reply to Strings in C++ on Sat, 10 Nov 2007 10:56:36 GMT]]></title><description><![CDATA[<p>Scorcher24 schrieb:</p>
<blockquote>
<p>Aber das hab ich in diesem Board eh schon gemerkt, dass man auf so Kleinigkeiten gern rumreitet <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=":\"
      alt="😕"
    /></p>
</blockquote>
<p>Glaub mir, irgendwann ignorierst du solche Kleinigkeit-anfechtenden Posts einfach <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="😃"
    /><br />
Das mit der negativen Speichergröße bezog sich glaubich darauf, dass du einen (signed) int für memory_size genommen hast.. Womit wir wieder bei den Kleinigkeiten wären <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400775</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 10 Nov 2007 10:56:36 GMT</pubDate></item><item><title><![CDATA[Reply to Strings in C++ on Sun, 11 Nov 2007 14:58:09 GMT]]></title><description><![CDATA[<p>danke jungs! hat funktioniert! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
ich versuche es mal mit std::string</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401391</guid><dc:creator><![CDATA[sheddy]]></dc:creator><pubDate>Sun, 11 Nov 2007 14:58:09 GMT</pubDate></item></channel></rss>