Wie sieht ein Programm aus, das prüft, ob ein String tatsächlich mit einem \0-Zeichen terminiert ist?
-
@Finnegan Ja, ich hab ja geschrieben "Ist also irgendwo Definitionssache was "der String" ist."
-
@Finnegan sagte in Wie sieht ein Programm aus, das prüft, ob ein String tatsächlich mit einem \0-Zeichen terminiert ist?:
@Belli sagte in Wie sieht ein Programm aus, das prüft, ob ein String tatsächlich mit einem \0-Zeichen terminiert ist?:
Das brauchst Du nicht zu prüfen: wenn eine Folge von chars im Speicher nicht 0-terminiert ist, ist es kein String.
Umgekehrt: Ein (C-)String ist immer nullterminiert, weil es sonst kein (C-)String ist.Du weisst schon, dass die Realität oft nicht so schön wohldefiniert und widerspruchsfrei wie die mathematische Theorie ist, oder? Dann ist die Aufgabe eben: "Prüfen Sie, ob die char-Folge ein C-String ist".
Ja, es kommt halt auf jedes Wort an, so wie SeppJ immer so schön betont, bei einem Programm auf jedes Zeichen.
Ich weiß natürlich was Du meinst, so wie Du auch weißt, was ich meine, trotzdem halte ich es für riskant, die Aufgabenstellung so anzupassen, dass eine gefundene 'Lösung' richtig ist.
Wer sagt denn, dass der Aufgabensteller nicht genau die Antwort haben will, die ich gegeben habe?Deshalb vielleicht:
@Swordfish sagte in Wie sieht ein Programm aus, das prüft, ob ein String tatsächlich mit einem \0-Zeichen terminiert ist?:
Vielleicht sollten wir warten bis sich @SophiaL wieder meldet und dann hoffentlich die KONKRETE AUFGABE preisgibt.
-
@Swordfish sagte in Wie sieht ein Programm aus, das prüft, ob ein String tatsächlich mit einem \0-Zeichen terminiert ist?:
Und ja, ein Zeichen in UTF-16 ist mindestens 16 bit breit.
Mindestens, oder exakt?
Ich dachte bisher, nur bei UTF8 können Zeichen unterschiedliche Bitbreiten haben.
-
@A-Grau sagte in Wie sieht ein Programm aus, das prüft, ob ein String tatsächlich mit einem \0-Zeichen terminiert ist?:
@Swordfish sagte in Wie sieht ein Programm aus, das prüft, ob ein String tatsächlich mit einem \0-Zeichen terminiert ist?:
Und ja, ein Zeichen in UTF-16 ist mindestens 16 bit breit.
Mindestens, oder exakt?
Ich dachte bisher, nur bei UTF8 können Zeichen unterschiedliche Bitbreiten haben.Mindestens. Eine Code-Unit von UTF-16 hat exakt 16 Bit, und ein Code-Point kann aus einer oder Zwei Code-Units bestehen (Stichwort Surrogate-Pairs). Weiters kann aber auch ein "Zeichen" (Glyph) aus mehreren Code-Units bestehen (Stichwort Combining Diacritics).
-
@Ein-ehemaliger-Benutzer sagte in Wie sieht ein Programm aus, das prüft, ob ein String tatsächlich mit einem \0-Zeichen terminiert ist?:
@Swordfish sagte in Wie sieht ein Programm aus, das prüft, ob ein String tatsächlich mit einem \0-Zeichen terminiert ist?:
Und ja, ein Zeichen in UTF-16 ist mindestens 16 bit breit.
Mindestens, oder exakt?
Ich dachte bisher, nur bei UTF8 können Zeichen unterschiedliche Bitbreiten haben.Falsch gedacht - und ein häufiges Missverständnis. Mindestens! Das kannst du dir auch leicht überlegen, denn es gibt aktuell ca 250.000 Code Points (siehe https://www.unicode.org/versions/Unicode6.2.0/appD.pdf#page=3), ein 16-Bit-Wert kann aber nur verschiedene Werte darstellen.
Lies mal https://utf8everywhere.org/ - Zitat:
UTF-16 is often misused as a fixed-width encoding, even by the Windows package programs themselves: in plain Windows edit control (until Vista), it takes two backspaces to delete a character which takes 4 bytes in UTF-16. On Windows 7, the console displays such characters as two invalid characters, regardless of the font being used.
Du bist also nicht allein mit dieser Fehlannahme.