<?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[Wie ermittelt man allgemein die Stringlänge?]]></title><description><![CDATA[<p>Hio....<br />
Ich hab mal eine allgemeine Frage zur Stringlängenermittlung:<br />
Ich arbeite meistens mit C-Strings (also einem Array aus char), weil ich diese dynamischer finde, zudem kann ich viele Funktionen dann selber schreiben. Aber da meine Frage eh ehr Programmierübergreifent ist, isses für das Beispiel irrelevant (Ich weiss, dass die c++ strings besser sein sollen/sind und mir vieles erleichtern).</p>
<p>Bisher habe ich die Stringlänge so ermittelt, dass ich nach dem ersten '\0' gesucht habe. Nun geht das leider bei einem Beispiel nicht, daher die Frage:<br />
Wie sieht diese Funktion bei C++ strings/Delphi string oder php oder was auch immer aus?<br />
Suchen die Funktion dabei auch nach einem abschließenden Zeichen? Oder kann man das noch irgendwie anders definieren? (Mal abgesehen davon, dass das letzt Zeichen auch ein A oder ein U oder was auch immer sein kann)<br />
Und die Stringlänge immer in einem Int mitzuübergeben, wenn man sie braucht ist doof <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 />
Zumal ich den User (ok, im diesem speziellen Fall wird es wohl nie dazu kommen) schlecht fragen kann: &quot;Wie lang war diese Zeichenkette?&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/186843/wie-ermittelt-man-allgemein-die-stringlänge</link><generator>RSS for Node</generator><lastBuildDate>Wed, 01 Jul 2026 17:44:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/186843.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 12 Jul 2007 21:57:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie ermittelt man allgemein die Stringlänge? on Thu, 12 Jul 2007 21:57:14 GMT]]></title><description><![CDATA[<p>Hio....<br />
Ich hab mal eine allgemeine Frage zur Stringlängenermittlung:<br />
Ich arbeite meistens mit C-Strings (also einem Array aus char), weil ich diese dynamischer finde, zudem kann ich viele Funktionen dann selber schreiben. Aber da meine Frage eh ehr Programmierübergreifent ist, isses für das Beispiel irrelevant (Ich weiss, dass die c++ strings besser sein sollen/sind und mir vieles erleichtern).</p>
<p>Bisher habe ich die Stringlänge so ermittelt, dass ich nach dem ersten '\0' gesucht habe. Nun geht das leider bei einem Beispiel nicht, daher die Frage:<br />
Wie sieht diese Funktion bei C++ strings/Delphi string oder php oder was auch immer aus?<br />
Suchen die Funktion dabei auch nach einem abschließenden Zeichen? Oder kann man das noch irgendwie anders definieren? (Mal abgesehen davon, dass das letzt Zeichen auch ein A oder ein U oder was auch immer sein kann)<br />
Und die Stringlänge immer in einem Int mitzuübergeben, wenn man sie braucht ist doof <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 />
Zumal ich den User (ok, im diesem speziellen Fall wird es wohl nie dazu kommen) schlecht fragen kann: &quot;Wie lang war diese Zeichenkette?&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1324206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324206</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Thu, 12 Jul 2007 21:57:14 GMT</pubDate></item><item><title><![CDATA[Reply to Wie ermittelt man allgemein die Stringlänge? on Thu, 12 Jul 2007 22:22:52 GMT]]></title><description><![CDATA[<p>ich geh stark davon aus, dass sowas in c++ oder anderen sprachen wirklich über ein int geht, welches die stringlänge definiert. und übergeben muss man das ja nicht immer:</p>
<pre><code class="language-cpp">typedef struct string {
  int len;
  char *data;
} string;

string string_create( char *str ) {
    string *rc = malloc( sizeof( string ) );
    rc-&gt;len = strlen( str );
    rc-&gt;data = strdup( str );
    return rc;
}

// und dann halt:
int string_length( string *str ) {
    return str-&gt;len;
}

int string_compare( string *str1, string *str2 ) {
    if( string_length( str1 ) != string_length( str2 ) )
        return( string_length( str1 ) &lt; string_length( str2 ) );

    return memcmp( str1-&gt;data, str2-&gt;data, min( str1-&gt;len, str2-&gt;len );
}
</code></pre>
<p>oder so ähnlich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1324213</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324213</guid><dc:creator><![CDATA[Only-Olli]]></dc:creator><pubDate>Thu, 12 Jul 2007 22:22:52 GMT</pubDate></item><item><title><![CDATA[Reply to Wie ermittelt man allgemein die Stringlänge? on Thu, 12 Jul 2007 22:33:27 GMT]]></title><description><![CDATA[<p>Strings in Delphi sind auch null-terminiert.<br />
Früher wurde das anders gemacht.<br />
Jeder String fasste maximal 255 Zeichen. Jedes Zeichen war 1 Byte groß.<br />
Bevor der eigentliche String anfing, gab es noch ein reserviertes Byte. In diesem wurde die Länge gespeichert (Deshalb max. 255 Zeichen).<br />
Diese Art von Strings kann man noch heute über Compiler-Schalter aktivieren oder den Datentyp 'ShortString' verwenden.<br />
In alten TP-Zeiten konnte man die Länge, sogar noch so ändern s[0] := 3;.</p>
<p>Das ist der Grund warum Indizes in Delphi+Pascal normalerweise bei 1 anfangen und nicht wie üblich bei 0.</p>
<p>Naja, aber zu deiner Frage.<br />
Du hast schon richtig erkannt, es gibt zwei praktikable Möglichkeiten, an die Länge eines Strings zu gelangen.<br />
1. Einmal berechnen - zwishen speichern - bei Änderungen -&gt; Länge mitändern<br />
2. Jedesmal neu berechnen</p>
<p>Für die zweite Methode brauchst du natürlich ein End-Zeichen (üblicherweise '/0')</p>
<p>std::string verwendet die erste Methode, ist deshalb auch nicht null-terminiert oder sonst was.<br />
std::string bietet aber den Vorteil das es String, Länge und vieles mehr bereitstellt. Bedeutet du übergibst nur eine Variable hast aber den String und die Länge -&gt; Perfekt!</p>
<p>P.S.: Vielleicht solltest du dein ominöses Beispiel mal zeigen. Oft sieht man die einfache Lösung einfach nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1324219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324219</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Thu, 12 Jul 2007 22:33:27 GMT</pubDate></item><item><title><![CDATA[Reply to Wie ermittelt man allgemein die Stringlänge? on Thu, 12 Jul 2007 22:51:15 GMT]]></title><description><![CDATA[<p>Es geht um ne Verschlüsselung (sitz ich nun schon kanpp 2 Wochen dran) und bin gerade halt beim Bugfanding.</p>
<p>Naja und da viel mir auf, dass wenn ein Zeichen nach dem Kodieren nur noch aus dem Bit 0 besteht, kann ich das zwar einfach wieder dekodieren, aber soweit komm ich gar nicht, weil meine for-Schleife denkt der String wäre schon vorbei.<br />
Daher geht ein abschließende Zeichen leider nicht.<br />
Die Stringlänge immer mit zu übergeben ginge, aber wäre bei einer Verschlüsselung ungünstig oder?</p>
<p>Fragt mich jetzt nicht wie das andere Verschlüsselungen genau handhaben, um solchen Frage nachzugehen fehlt mir momentan die Fachliteratur^^</p>
<p>Und den Output von einem Zeichen mit Bit 0 abzufangen geht zwar (und werde ich wohl aufgrund der Leserlichkeit auch machen) aber ist halt nicht Ziel des Ganzen <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 />
Ich suche (und das vielleicht auch mal für später) eine gute Möglichkeit einen String ordentlich abzugrenzen <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/1324225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324225</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Thu, 12 Jul 2007 22:51:15 GMT</pubDate></item><item><title><![CDATA[Reply to Wie ermittelt man allgemein die Stringlänge? on Fri, 13 Jul 2007 04:33:30 GMT]]></title><description><![CDATA[<p>Betrachte das char array nicht als string sondern als char array mit einer länge. also keine string funktionen verwenden, sondern memcpy und so n zeug.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1324251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324251</guid><dc:creator><![CDATA[chefposten]]></dc:creator><pubDate>Fri, 13 Jul 2007 04:33:30 GMT</pubDate></item><item><title><![CDATA[Reply to Wie ermittelt man allgemein die Stringlänge? on Fri, 13 Jul 2007 05:33:07 GMT]]></title><description><![CDATA[<p>entweder du benutzt ne klartext verschlüsselung, d.h. nur lesbare zeichen sind gültige zeichen. oder du behandelst die cstrings einfach als stinknormale arrays. dann musst du natürlich die länge des arrays in funktionen mitgeben. das ist auch bei verschlüsselung kein problem. wenn es ein problem darstellen sollte, dann ist die verschlüsselung mist <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/1324262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324262</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Fri, 13 Jul 2007 05:33:07 GMT</pubDate></item><item><title><![CDATA[Reply to Wie ermittelt man allgemein die Stringlänge? on Fri, 13 Jul 2007 08:03:00 GMT]]></title><description><![CDATA[<p>Bei C++ könnte man auch einen vector&lt;char&gt; verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1324369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324369</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 13 Jul 2007 08:03:00 GMT</pubDate></item><item><title><![CDATA[Reply to Wie ermittelt man allgemein die Stringlänge? on Fri, 13 Jul 2007 09:21:51 GMT]]></title><description><![CDATA[<p>chefposten schrieb:</p>
<blockquote>
<p>Betrachte das char array nicht als string sondern als char array mit einer länge. also keine string funktionen verwenden, sondern memcpy und so n zeug.</p>
</blockquote>
<p>Das tue ich, ich habe alle bisher benötigten Funktionen immer selber geschrieben. Also Stringlänge ermitteln, kopieren, anhängen etc.</p>
<p>Braunstein schrieb:</p>
<blockquote>
<p>Bei C++ könnte man auch einen vector&lt;char&gt; verwenden.</p>
</blockquote>
<p>Mag ich nicht mit zu arbeiten :-), aber frag mich nicht warum^^</p>
<p>thordk schrieb:</p>
<blockquote>
<p>das ist auch bei verschlüsselung kein problem. wenn es ein problem darstellen sollte, dann ist die verschlüsselung mist <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>Warum das? Wie soll den mein Gegenüber, dem ich eine verschlüsselte Nachricht schicke wissen wie lang diese ist? Man könnte sich höchsten auf eine Maximallänge von XXX Zeichen einigen, aber dann werden auch die unnötigen Zeichen (wenn die Nachricht nicht der Maximallänge entspricht) dekodiert, wo wieder murks rauskommt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1324468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324468</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Fri, 13 Jul 2007 09:21:51 GMT</pubDate></item><item><title><![CDATA[Reply to Wie ermittelt man allgemein die Stringlänge? on Fri, 13 Jul 2007 09:27:33 GMT]]></title><description><![CDATA[<p>Pille456 schrieb:</p>
<blockquote>
<p>thordk schrieb:</p>
<blockquote>
<p>das ist auch bei verschlüsselung kein problem. wenn es ein problem darstellen sollte, dann ist die verschlüsselung mist <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>Warum das? Wie soll den mein Gegenüber, dem ich eine verschlüsselte Nachricht schicke wissen wie lang diese ist? Man könnte sich höchsten auf eine Maximallänge von XXX Zeichen einigen, aber dann werden auch die unnötigen Zeichen (wenn die Nachricht nicht der Maximallänge entspricht) dekodiert, wo wieder murks rauskommt</p>
</blockquote>
<p>Da hast du zwei Möglichkeiten, das zu lösen: Entweder du sendest vor dem verschlüsselten Text die Anzahl (wahlweise unverschlüsselt oder auch verschlüsselt, aber in fester Länge<sup>*</sup>) - oder der Empfänger holt und dekodiert solange weiter, bis er ein '\0' in den Händen hält:</p>
<pre><code class="language-cpp">do
{
  char cr = recieve_char();
  char d = decode(cr);
  data.push_back(d);
}
while(d!='\0');
</code></pre>
<p><sup>*</sup> z.B. könntest du die Binärdarstellung der Stringlänge in sizeof(int) Zeichen zerlegen und durch die Verschlüsselung jagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1324475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324475</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 13 Jul 2007 09:27:33 GMT</pubDate></item><item><title><![CDATA[Reply to Wie ermittelt man allgemein die Stringlänge? on Fri, 13 Jul 2007 09:48:42 GMT]]></title><description><![CDATA[<p>Pille456 schrieb:</p>
<blockquote>
<p>chefposten schrieb:</p>
<blockquote>
<p>Betrachte das char array <strong>nicht als string</strong> sondern als char array mit einer länge. also keine string funktionen verwenden, sondern memcpy und so n zeug.</p>
</blockquote>
<p>Das tue ich, ich habe alle bisher benötigten Funktionen immer selber geschrieben. Also Stringlänge ermitteln, kopieren, anhängen etc.</p>
</blockquote>
<p>du hast ein array von char und eine variable in der die länge gespeichert wird. nix länge ermitteln, die ist bekannt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1324493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324493</guid><dc:creator><![CDATA[chefposten]]></dc:creator><pubDate>Fri, 13 Jul 2007 09:48:42 GMT</pubDate></item><item><title><![CDATA[Reply to Wie ermittelt man allgemein die Stringlänge? on Fri, 13 Jul 2007 10:25:31 GMT]]></title><description><![CDATA[<p>@Chefposten:<br />
Achso meintes du das. Stimmt, hast du eigentlich recht mit, aber in manchen Fällen ist es vielleicht besser nicht den gesamten Array durchzugehen, sondern nur den effektiv genutzten Teil. Wenn man bestimmte, langwierige Berechnung oder so durchführt, die sich auf den Array beziehen, kann jeder Schleifen durchlauf weniger schon helfen, das Programm schneller zu machen.<br />
Aber sonst hast du natürlich recht <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>Die Länge (ob nun verschlüsselt oder unverschlüsselt) zu übermitteln finde ich nicht so passend. Da würde ich ehr zu der Möglichkeit tendieren, nach dem ersten '\0' zu suchen. Dann muss ich zwar ein Zeichen mehr Kodieren, aber das wird ja hoffentlich nicht zu sehr ins Gewicht fallen <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="😉"
    /><br />
Zudem habe ich, aufgrund der festgelegten Arraygröße (ok, dynamisch ginge auch...) einen bestimmten Endpunkt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1324535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324535</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Fri, 13 Jul 2007 10:25:31 GMT</pubDate></item><item><title><![CDATA[Reply to Wie ermittelt man allgemein die Stringlänge? on Fri, 13 Jul 2007 19:38:05 GMT]]></title><description><![CDATA[<p>Pille456 schrieb:</p>
<blockquote>
<p>Naja und da viel mir auf, dass wenn ein Zeichen nach dem Kodieren nur noch aus dem Bit 0 besteht, kann ich das zwar einfach wieder dekodieren, aber soweit komm ich gar nicht, weil meine for-Schleife denkt der String wäre schon vorbei.</p>
</blockquote>
<p>Wegen solchen Sachen ist es keine gute Idee, nullterminierte Strings für Verschlüsselung zu verwenden. Zumindest nicht dort, wo jeder beliebige Bytewert ein gültiger verschlüsselter Wert sein kann. Wie chefposten schon sagte, sinnvoll ist hier nur ein Byte Sequenz Container (zB vector&lt;char&gt;). Die Grösse wird dann natürlich immer separat mitgeschleift, aber da sehe ich ehrlich gesagt kein Problem. Zur Not kann man sich auch einen TP ähnlichen String basteln. Und ob am Beginn die Länge oder am Ende ein Nullzeichen steht, ist letztendlich gehüpft wie gesprungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1324926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324926</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Fri, 13 Jul 2007 19:38:05 GMT</pubDate></item></channel></rss>