n'Abend Mathias,
sehr schön - genau dieses Ergebnis hätte dir strlen() auch geliefert.
Womit du natürlich recht hast, doch …
*fg*
char s[] = "Oberfläche";
s[0] = O (1 Bytes)
s[1] = b (1 Bytes)
s[2] = e (1 Bytes)
s[3] = r (1 Bytes)
s[4] = f (1 Bytes)
s[5] = l (1 Bytes)
s[6] = ? (2 Bytes)
Aha, ich glaube, ich erkenne das System und wie man es ausnutzen kann: Bis hierher waren es alles Zeichen, die in einem Byte codiert werden, und nun kommt eines, das zwei Bytes braucht; mblen() scheint hier nicht nur ein Byte zu betrachten, sondern s[6] und s[7], die zusammen ein UTF8-Zeichen bilden.
s[7] = ? (-1 Bytes)
Und s[7] allein ist ein Bytewert, der *kein* gültiges UTF8-Zeichen sein kann und wird daher vermutlich mit -1 bezeichnet.
s[8] = c (1 Bytes)
s[9] = h (1 Bytes)
s[10] = e (1 Bytes)
Okay, der Rest ist wieder klar. Scheint so, als müsste man zur Ermittlung der Stringlänge in Zeichen, nicht Bytes, den String von Anfang bis Ende durchmarschieren, die Schritte mitzählen, und den Index dabei immer um das Ergebnis von mblen(s[i]) weitersetzen. Die Anzahl der Schritte, nicht der Index, ist dann die Stringlänge.
Damit werde ich nun sicher eine Möglichkeit finden, die Anzahl der Zeichen in einer Zeichenkette zu ermitteln.
[X] Done. :-)
Na dann erstmal gute Nacht,
Martin
Es gibt Dinge, die sind sooo falsch, dass nicht einmal das Gegenteil stimmt.