<?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[Pointer zu Character-Array &#x2F; Speicherbelegung]]></title><description><![CDATA[<p>Hallo,<br />
ich habe eine Frage zur Funktion c_str(), welche mir einen char-pointer zu einer string-variable liefert.<br />
In dem folgenden Beispiel lasse ich den Pointer bewusst über das char-array hinauslaufen.</p>
<pre><code>#include&lt;iostream&gt;;
#include&lt;string&gt;;

using namespace std;

int main(){
	string a=&quot;teststring&quot;;
	const char* b=a.c_str();
	char* c=new char[100];
	for(int i=0; i&lt;100;i++){
		c[i]=b[i];}
	for(int i=0; i&lt;100;i++){	
			cout &lt;&lt; c[i];}
    delete []c;

}
</code></pre>
<p>Ich erhalte als output in der commandozeile:</p>
<pre><code>teststringteststringteststringteststringteststring
</code></pre>
<p>Kann mir jemand erklären, warum der String fünfmal im Speicher präsent ist, und warum für 50 characters 100 konsekutive bytes belegt werden?</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/242837/pointer-zu-character-array-speicherbelegung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 19:27:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/242837.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 08 Jun 2009 17:52:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer zu Character-Array &#x2F; Speicherbelegung on Mon, 08 Jun 2009 17:52:03 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe eine Frage zur Funktion c_str(), welche mir einen char-pointer zu einer string-variable liefert.<br />
In dem folgenden Beispiel lasse ich den Pointer bewusst über das char-array hinauslaufen.</p>
<pre><code>#include&lt;iostream&gt;;
#include&lt;string&gt;;

using namespace std;

int main(){
	string a=&quot;teststring&quot;;
	const char* b=a.c_str();
	char* c=new char[100];
	for(int i=0; i&lt;100;i++){
		c[i]=b[i];}
	for(int i=0; i&lt;100;i++){	
			cout &lt;&lt; c[i];}
    delete []c;

}
</code></pre>
<p>Ich erhalte als output in der commandozeile:</p>
<pre><code>teststringteststringteststringteststringteststring
</code></pre>
<p>Kann mir jemand erklären, warum der String fünfmal im Speicher präsent ist, und warum für 50 characters 100 konsekutive bytes belegt werden?</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1723444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1723444</guid><dc:creator><![CDATA[Martin2000]]></dc:creator><pubDate>Mon, 08 Jun 2009 17:52:03 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer zu Character-Array &#x2F; Speicherbelegung on Mon, 08 Jun 2009 18:01:14 GMT]]></title><description><![CDATA[<p>Vielleicht liegt der Speicher für dein char-Array direkt hinter dem Speicher den die String-Klasse angelegt hat. Und wenn du mit dem Zeiger durchläufst kopierst du sozusagen zuerst die Zeichen aus dem String, dann läufst du auf das Array auf und kopierst die eben gerade reingeschriebenen Zeichen nochmal dahinter usw. usw.</p>
<p>Ist konsekutiv etwas schweinisches? <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/1723446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1723446</guid><dc:creator><![CDATA[Mitleid]]></dc:creator><pubDate>Mon, 08 Jun 2009 18:01:14 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer zu Character-Array &#x2F; Speicherbelegung on Mon, 08 Jun 2009 18:04:49 GMT]]></title><description><![CDATA[<p>Martin2000 schrieb:</p>
<blockquote>
<p>Kann mir jemand erklären, warum der String fünfmal im Speicher präsent ist, und warum für 50 characters 100 konsekutive bytes belegt werden?</p>
</blockquote>
<p>Du liest über das Array <code>b</code> hinaus, das ist undefiniert und dein Programm darf machen was es will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1723447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1723447</guid><dc:creator><![CDATA[Registrierter Troll]]></dc:creator><pubDate>Mon, 08 Jun 2009 18:04:49 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer zu Character-Array &#x2F; Speicherbelegung on Mon, 08 Jun 2009 18:36:27 GMT]]></title><description><![CDATA[<p>Okay, vielen Dank für diese Antworten. Meine Frage entstand aus folgender Überlegung. Ich arbeite zur Zeit mit Bruce Eckel's Buch &quot;Thinking in C++&quot;.</p>
<p>Hier wird im 4ten Kapitel ein Object eingeführt, dass unter anderem die folgende Funktion besitzt:</p>
<pre><code>int Stash::add(const void* element) {
  if(next &gt;= quantity) // Enough space left?
    inflate(increment);
  // Copy element into storage,
  // starting at next empty space:
  int startBytes = next * size;
  unsigned char* e = (unsigned char*)element;
  for(int i = 0; i &lt; size; i++)
    storage[startBytes + i] = e[i];
  next++;
  return(next - 1); // Index number
}
</code></pre>
<p>Nun gibt es hierzu einen Beispielaufruf:</p>
<pre><code>ifstream in(&quot;CppLibTest.cpp&quot;);
  string line;
  while(getline(in, line))
    Stash.add(line.c_str());
</code></pre>
<p>Hierzu muss noch gesagt werden, dass die Variable size=80 beträgt und 'storage' ein char-array mit freiem Speicher ab [startBytes ist.<br />
Wenn nun die eingelesene Zeile &quot;CppLibTest.cpp&quot; nicht 80 Zeichen besitzt, wird dann durch den counter 'i &lt; size' (Zeile <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="8)"
      alt="😎"
    /> nicht automatisch auch Müll in den Speicher geladen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1723470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1723470</guid><dc:creator><![CDATA[Martin2000]]></dc:creator><pubDate>Mon, 08 Jun 2009 18:36:27 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer zu Character-Array &#x2F; Speicherbelegung on Mon, 08 Jun 2009 18:42:30 GMT]]></title><description><![CDATA[<p>Oder du hast eine speicherverschwendende <code>std::string</code> -Implementierung. :p<br />
Nein, undefiniertes Verhalten ist nicht immer trivial erklärbar. Achte einfach darauf, dass du dich nicht etwa auf solche Eigenschaften verlässt. Das Programm dürfte auch ohne Weiteres abstürzen oder noch Schlimmeres veranstalten.</p>
<p>Mitleid schrieb:</p>
<blockquote>
<p>Ist konsekutiv etwas schweinisches? <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>Nein, das bedeutet etwa so viel wie &quot;aufeinanderfolgend&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:</p>
<p>Martin2000 schrieb:</p>
<blockquote>
<p>Wenn nun die eingelesene Zeile &quot;CppLibTest.cpp&quot; nicht 80 Zeichen besitzt, wird dann durch den counter 'i &lt; size' (Zeile <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="8)"
      alt="😎"
    /> nicht automatisch auch Müll in den Speicher geladen?</p>
</blockquote>
<p>Doch. Die Funktion ist sowieso eher böse, nur schon wegen des <code>void*</code> und Casts zu <code>unsigned char</code> . Keine Ahnung, was damit bezweckt wird...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1723471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1723471</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 08 Jun 2009 18:42:30 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer zu Character-Array &#x2F; Speicherbelegung on Mon, 08 Jun 2009 18:44:48 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Nein, das bedeutet etwa so viel wie &quot;aufeinanderfolgend&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>
</blockquote>
<p>Schlauberger sind verdammt unbeliebt! <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="😃"
    /> <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 />
Aber, Danke, dass du es erklärt hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1723473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1723473</guid><dc:creator><![CDATA[Mitleid]]></dc:creator><pubDate>Mon, 08 Jun 2009 18:44:48 GMT</pubDate></item></channel></rss>