<?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[] und char*]]></title><description><![CDATA[<p>ich möchte ein char[] an eine Funktion übergeben,</p>
<p>habe die Funktion so implementiert das sie ein char* erwartet,<br />
(weil ich das mit dem char[] nicht hinbekommen habe)</p>
<p>gibt es jetzt noch eine Möglichkeit herauszufinden wie groß das ursprüngliche array war?</p>
<p>Oder kann ich evtl. doch irgendwie mit dem char[] arbeiten, hab es nur noch nicht ganz verstanden ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/264481/char-und-char</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 16:50:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264481.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 08 Apr 2010 10:55:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to char[] und char* on Thu, 08 Apr 2010 10:55:58 GMT]]></title><description><![CDATA[<p>ich möchte ein char[] an eine Funktion übergeben,</p>
<p>habe die Funktion so implementiert das sie ein char* erwartet,<br />
(weil ich das mit dem char[] nicht hinbekommen habe)</p>
<p>gibt es jetzt noch eine Möglichkeit herauszufinden wie groß das ursprüngliche array war?</p>
<p>Oder kann ich evtl. doch irgendwie mit dem char[] arbeiten, hab es nur noch nicht ganz verstanden ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879254</guid><dc:creator><![CDATA[MBreuer]]></dc:creator><pubDate>Thu, 08 Apr 2010 10:55:58 GMT</pubDate></item><item><title><![CDATA[Reply to char[] und char* on Thu, 08 Apr 2010 11:01:50 GMT]]></title><description><![CDATA[<p>char[] und char* sind bei Übergabe an Funktionen das gleiche. Und nein, es ist allgemein nicht möglich bei Übergabe von Arrays an Funktionen deren Länge heraus zu finden.<br />
Mögliche Gegenmaßnahmen:<br />
- Länge mit übergeben<br />
- Anfang und Ende übergeben<br />
- Array in Klasse kapseln. Das gibt's auch schon fertig und nennt sich std::vector. Es gibt sogar einen speziellen vector für char, der nennt sich std::string.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879257</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 08 Apr 2010 11:01:50 GMT</pubDate></item><item><title><![CDATA[Reply to char[] und char* on Thu, 08 Apr 2010 13:55:59 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>char[] und char* sind bei Übergabe an Funktionen das gleiche. Und nein, es ist allgemein nicht möglich bei Übergabe von Arrays an Funktionen deren Länge heraus zu finden.<br />
Mögliche Gegenmaßnahmen:<br />
- Länge mit übergeben<br />
- Anfang und Ende übergeben<br />
- Array in Klasse kapseln. Das gibt's auch schon fertig und nennt sich std::vector.</p>
</blockquote>
<p>- '\0' an das Ende anhängen<br />
- wie in Pascal in das erste char-Element die Länge reinschreiben (die maximale Länge ist dann halt 255 Zeichen)</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Es gibt sogar einen speziellen vector für char, der nennt sich std::string.</p>
</blockquote>
<p>Und std::string ist ein typedef für std::basic_string&lt;char&gt;.<br />
Es gibt auch wstring (für basic_string&lt;wchar_t&gt;) und in C++0x auch noch u16string und u32string und vielleicht auch noch u8string.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879388</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Thu, 08 Apr 2010 13:55:59 GMT</pubDate></item><item><title><![CDATA[Reply to char[] und char* on Thu, 08 Apr 2010 14:15:40 GMT]]></title><description><![CDATA[<p>Haben wir eigentlich keinen Array/Zeiger-Artikel, der das auch mit der Typtransformation bei Funktionsparametern erklärt?</p>
<p><code>char[]</code> ist in erster Linie ein unvollständiger Typ. Als solches kann er in drei Kontexten auftauchen:</p>
<ul>
<li>Bei einer Deklaration eines Arrays (unbekannter Länge) und statischer Lebensdauer</li>
<li>Bei einer <em>Definition mit Initialisierungsliste</em> (der Compiler zählt für uns die Eelemente in der Liste und macht aus dem unvollständigen Typen einen vollständigen)</li>
<li>Als Typ eines Funktionsparameters, wobei in Wirklichkeit ein <code>char*</code> draus gemacht wird.</li>
</ul>
<p>(gilt natürlich nicht nur für <code>char</code> )</p>
<p>Beispiele:</p>
<pre><code class="language-cpp">extern const char nachricht[];

// Typ von nachricht ist noch unvollständig
// sizeof(nachricht) geht noch nicht.
// &quot;pointer to array decay&quot; sowie Elementzugriff klappt aber schon

extern const char nachricht[] = &quot;RTFM&quot;;

// Typ von nachricht ist  const char[7]
// sizeof(nachricht) liefert ab hier auch 7

void anzeigen(const char msg[])
{
  // Typ von msg ist tatsächlich const char*
  // sizeof(msg) == sizeof(char*)
  cout &lt;&lt; msg;
}

int main() {
  anzeigen(nachricht);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1879411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879411</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 08 Apr 2010 14:15:40 GMT</pubDate></item><item><title><![CDATA[Reply to char[] und char* on Thu, 08 Apr 2010 14:46:00 GMT]]></title><description><![CDATA[<p>MBreuer schrieb:</p>
<blockquote>
<p>gibt es jetzt noch eine Möglichkeit herauszufinden wie groß das ursprüngliche array war?</p>
</blockquote>
<p>man könnte es doch theoretisch so machen, oder sollte man so etw. lieber vermeiden <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>[ EDIT ]</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

void fkt(char (&amp;ar)[8])
{
    std::cout &lt;&lt; sizeof(ar);
    std::cout &lt;&lt; std::endl &lt;&lt; ar;
}

int main()
{
    char ar[] = &quot;Test123&quot;;
    fkt(ar);

    getchar();
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1879431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879431</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 08 Apr 2010 14:46:00 GMT</pubDate></item><item><title><![CDATA[Reply to char[] und char* on Thu, 08 Apr 2010 14:36:46 GMT]]></title><description><![CDATA[<p>Das mit der Referenz ist natürlich überflüssig. Klar, im Fall von nullterminierten C-Strings kann man das so machen. Zumindest weiß man dann, wo die Nullterminierung sitzt. Das Array könnte allerdings länger sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879435</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 08 Apr 2010 14:36:46 GMT</pubDate></item><item><title><![CDATA[Reply to char[] und char* on Thu, 08 Apr 2010 14:38:44 GMT]]></title><description><![CDATA[<p>Dweb schrieb:</p>
<blockquote>
<p>MBreuer schrieb:</p>
<blockquote>
<p>gibt es jetzt noch eine Möglichkeit herauszufinden wie groß das ursprüngliche array war?</p>
</blockquote>
<p>man könnte es doch theoretisch so machen, oder sollte man so etw. lieber vermeiden <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>
</blockquote>
<p>Das ist eine schicke Schreibweise für wxSkips Vorschlag, eine \0 anzuhängen. Das geht natürlich und ist auch die übliche Vorgehensweise, wenn man in C Strings behandelt. Jedoch ist allein aus der Angabe des Threaderstellers nicht klar, ob er mit C-Strings arbeitet oder ob das char-Array einem anderen Zweck (bei dem Nullterminierung nicht in Frage kommt) dient.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879438</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 08 Apr 2010 14:38:44 GMT</pubDate></item><item><title><![CDATA[Reply to char[] und char* on Thu, 08 Apr 2010 14:39:23 GMT]]></title><description><![CDATA[<p>edit: Entschuldigung, Doppelpost.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879439</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 08 Apr 2010 14:39:23 GMT</pubDate></item><item><title><![CDATA[Reply to char[] und char* on Fri, 09 Apr 2010 04:46:54 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Das mit der Referenz ist natürlich überflüssig.</p>
</blockquote>
<p>In diesem Fall nicht unbedingt, da dort tatsächlich der Typ der Referenz ein Array von 8 Zeichen ist. Damit funktioniert auch der sizeof Operator wieder &quot;wie erwartet&quot;. Ist im Zusammenhang mit Templates häufig anzutreffen.</p>
<pre><code class="language-cpp">template&lt;size_t N&gt;
void blank_out(char (&amp;a)[N]) {
    assert(sizeof(a) == N);
    std::fill(a, a+N-1, ' ');
    a[N-1] = '\0';
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1879802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879802</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 09 Apr 2010 04:46:54 GMT</pubDate></item><item><title><![CDATA[Reply to char[] und char* on Fri, 09 Apr 2010 06:06:58 GMT]]></title><description><![CDATA[<p>kann mir dies hier bitte jemand erklären ?</p>
<blockquote>
<p>char (&amp;a)[N]</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1879815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879815</guid><dc:creator><![CDATA[MBreuer]]></dc:creator><pubDate>Fri, 09 Apr 2010 06:06:58 GMT</pubDate></item><item><title><![CDATA[Reply to char[] und char* on Fri, 09 Apr 2010 07:03:24 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>krümelkacker schrieb:</p>
<blockquote>
<p>Das mit der Referenz ist natürlich überflüssig.</p>
</blockquote>
<p>In diesem Fall nicht unbedingt, da dort tatsächlich der Typ der Referenz ein Array von 8 Zeichen ist.</p>
</blockquote>
<p>Dweb hat es für nötig gehalten, seinen Beitrag abzuändern. Vorher stand dort <code>char* const&amp; ar</code> und nicht <code>char (&amp;ar)[N]</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879830</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 09 Apr 2010 07:03:24 GMT</pubDate></item><item><title><![CDATA[Reply to char[] und char* on Fri, 09 Apr 2010 08:57:41 GMT]]></title><description><![CDATA[<p>MBreuer schrieb:</p>
<blockquote>
<p>ich möchte ein char[] an eine Funktion übergeben,<br />
gibt es jetzt noch eine Möglichkeit herauszufinden wie groß das ursprüngliche array war?</p>
</blockquote>
<p>joa, am Anfang hatte ich &quot;eine Reference auf einen Zeiger gepostet&quot;,<br />
aber das hat ja eigentlich net viel gebracht, weil er in der Funktion die Größe des Arrays wissen will <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="😃"
    /> ... deswegen umgeändert.</p>
<pre><code class="language-cpp">/*
        Reference auf ein Array:
            Die Klammern &quot;()&quot; musste du machen,
            weil du sonst ein Array mit 'size' Referencen anlegst,
            anstatt eine Reference auf ein Array.

        Hier z.B. eine Reference auf eine int-Variable:
            int x;
            int&amp; ref = x;
    */

    char array[] = &quot;Test123&quot;;
    char (&amp;reference_auf_array)[8] = array;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1879869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879869</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 09 Apr 2010 08:57:41 GMT</pubDate></item><item><title><![CDATA[Reply to char[] und char* on Fri, 09 Apr 2010 09:27:54 GMT]]></title><description><![CDATA[<p>MBreuer schrieb:</p>
<blockquote>
<p>ich möchte ein char[] an eine Funktion übergeben,<br />
gibt es jetzt noch eine Möglichkeit herauszufinden wie groß das ursprüngliche array war?</p>
</blockquote>
<pre><code class="language-cpp">template&lt;typename _Ty, size_t _n&gt;
size_t GetArraySize(_Ty (&amp;array)[_n]) { return _n; }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1879884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879884</guid><dc:creator><![CDATA[FrEEzE2046]]></dc:creator><pubDate>Fri, 09 Apr 2010 09:27:54 GMT</pubDate></item></channel></rss>