<?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[sizeof() liefer falsches Ergebnis?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Funktion geschrieben, die einen string in einen char-Array umwandelt:</p>
<pre><code class="language-cpp">char * PChar(string text)
{
	char* tmp = strdup(text.c_str()); 
	cout &lt;&lt; tmp &lt;&lt; &quot; size: &quot; &lt;&lt; sizeof(tmp) &lt;&lt; &quot;\n&quot;;
	cout &lt;&lt; tmp[0] &lt;&lt; tmp[1] &lt;&lt; tmp[2] &lt;&lt; tmp[3] &lt;&lt; tmp[4] &lt;&lt; tmp[5] &lt;&lt; tmp[6] &lt;&lt; &quot;\n&quot;;
	return tmp; 
}
</code></pre>
<p>Als text übergebe ich &quot;Guten Tag&quot; - ich erhalte folgende Ausgabe:</p>
<pre><code>Guten Tag size: 4
Guten T
</code></pre>
<p>Warum erhalte ich bei sizeof(tmp) als Rückgabewert eine 4? tmp wurde richig erstellt und ich habe, wie man in der letzten Zeile sieht, auch über das 4te Element des tmp-Arrays aus ihm lesen können.</p>
<p>Ich benötige die Länge des Arrays für einen späteren write()-Aufruf (Schreiben in ein Datei-Handle). Dort benötige ich die korrekte Länge des char-Arrays.</p>
<p>Bitte um Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/143442/sizeof-liefer-falsches-ergebnis</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 05:54:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/143442.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 08 Apr 2006 15:19:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to sizeof() liefer falsches Ergebnis? on Sat, 08 Apr 2006 15:19:22 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Funktion geschrieben, die einen string in einen char-Array umwandelt:</p>
<pre><code class="language-cpp">char * PChar(string text)
{
	char* tmp = strdup(text.c_str()); 
	cout &lt;&lt; tmp &lt;&lt; &quot; size: &quot; &lt;&lt; sizeof(tmp) &lt;&lt; &quot;\n&quot;;
	cout &lt;&lt; tmp[0] &lt;&lt; tmp[1] &lt;&lt; tmp[2] &lt;&lt; tmp[3] &lt;&lt; tmp[4] &lt;&lt; tmp[5] &lt;&lt; tmp[6] &lt;&lt; &quot;\n&quot;;
	return tmp; 
}
</code></pre>
<p>Als text übergebe ich &quot;Guten Tag&quot; - ich erhalte folgende Ausgabe:</p>
<pre><code>Guten Tag size: 4
Guten T
</code></pre>
<p>Warum erhalte ich bei sizeof(tmp) als Rückgabewert eine 4? tmp wurde richig erstellt und ich habe, wie man in der letzten Zeile sieht, auch über das 4te Element des tmp-Arrays aus ihm lesen können.</p>
<p>Ich benötige die Länge des Arrays für einen späteren write()-Aufruf (Schreiben in ein Datei-Handle). Dort benötige ich die korrekte Länge des char-Arrays.</p>
<p>Bitte um Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1033300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1033300</guid><dc:creator><![CDATA[LinuxFan]]></dc:creator><pubDate>Sat, 08 Apr 2006 15:19:22 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof() liefer falsches Ergebnis? on Sat, 08 Apr 2006 15:23:53 GMT]]></title><description><![CDATA[<p>&quot;tmp&quot; ist ein char-Zeiger, kein Array, und Zeiger sind auf 32-bit Architekturen 4 Byte lang, deshalb liefert sizeof 4 zurück.</p>
<p>Die Korrekte Länge eines C-Strings liefert strlen. Bei einfachen Arrays die Du als Zeiger übergibst musst Du die Länge selbst nachhalten. Einzig bei echten Arrays klappt sowas (aber nur wie aus dem Ding kein Zeiger gemacht wird, z.B. bei Übergabe an eine Funktion):</p>
<pre><code class="language-cpp">int array[] = { 1,2,3,4,5 };
cout &lt;&lt; sizeof(array)/sizeof(int);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1033302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1033302</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sat, 08 Apr 2006 15:23:53 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof() liefer falsches Ergebnis? on Sat, 08 Apr 2006 16:02:09 GMT]]></title><description><![CDATA[<p>Wie kann ich denn jetzt die Funktion einen Array als &quot;return&quot; ausgeben lassen, bei dem man sizeof() anwenden kann?<br />
Oder wie soll ich das Problem lösen?</p>
<p>Achso, also quasi die Funktion so lassen und bei meiner write()-Funktion, wo ich die Länge des Arrays brauche, strlen() verwenden? Ich versuch es mal, danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1033327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1033327</guid><dc:creator><![CDATA[LinuxFan]]></dc:creator><pubDate>Sat, 08 Apr 2006 16:02:09 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof() liefer falsches Ergebnis? on Sat, 08 Apr 2006 16:04:28 GMT]]></title><description><![CDATA[<p>Am besten durch Konvention. Die Konvention bei C-Strings ist z.B., dass der Array durch eine Ende-Marke abgeschlossen wird. Das ist bei C-Strings das Nullbyte (setzt natürlich voraus, dass das Nullbyte kein gültiges Element innerhalb des Array sein darf). Dann kannst Du vom Array-Anfang aus durchzählen bis Du die Ende-Marke erreichst. Genau das macht strlen.</p>
<p>Du könntest also (wenn es sich nicht um char-Arrays handelt) ein Ende-Element definieren was sonst im Array nicht vorkommen darf.</p>
<p>Oder Du lieferst die Länge mit zurück, bspw. in einer struct die Array und Länge kapselt. Das wäre eine alternative Konvention, die den Nachteil Overhead (mehr Daten zu pflegen), und den Vorteil Speed (der Array muss nicht durchgezählt werden) hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1033335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1033335</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sat, 08 Apr 2006 16:04:28 GMT</pubDate></item></channel></rss>