"Working Code" ist insbesondere bei einem Anfänger keine absolute Feststellung. Und irgendwo muss man seine Frage ja posten. Hier im debianforum habe ich ja auch bereits wieder viele hilfreiche Anregungen bekommen. Und auch die Antwort von dem User bei stackexchange war ja hilfreich, doch erst mit ein wenig Erklärung.
"Lästig" ist mir Kritik nie, dass mein Verständnis "löchrig" ist, ist ja eh klar, wie könnte es auch anders sein. Man kann ja nie gleich alles wissen. Dafür muss sich doch niemand schämen! Vielleicht ist man manchmal kurz enttäuscht, dass noch nicht alles richtig ist, aber diese Enttäuschung weicht ja schnell der Freude, wenn es dann besser wird!
Zu meiner Funktion:
Ich habe jetzt bald beide Ansätze soweit. Warum doch wieder beide?
Das stimmt nicht ganz, denn das Problem kann ich - glaube ich - lösen, wenn ich mich einfach auf den Rückgabewert von mblen verlasse statt auf mein Macro "ISCB" (welches ich geschrieben hatte, um Continuation Bytes zu entdecken, was aber nur bei UTF-8 funktioniert). Der Rückgabewert von mblen ist nämlich -1, wenn ein Continuation Byte vorliegt. Denn Zitat manpage mblen:RobertDebiannutzer hat geschrieben:14.12.2018 09:54:00Der Hase liegt dort im Pfeffer, wo über die Continuation Bytes eines Multibyte-Encodings zurückgeloopt wird.
Dann sieht das quasi so aus:If the n bytes starting at s do not contain a complete multibyte character, mblen() returns -1.
Code: Alles auswählen
/* loop to begin of character */
while ((r = mblen(s1, MB_LEN_MAX)) < 0) { s1--; };
memcpy(u1, s1, r);
u1[r] = '\0';
/* loop to begin of character */
while ((r = mblen(s2, MB_LEN_MAX)) < 0) { s2--; };
memcpy(u2, s2, r);
u2[r] = '\0';