Hallo,
Da ich erst vor kurzer zeit auf Ubuntu umgestiegen bin, spiele ich immer noch mit dem System herum. Unter anderem habe ich gerade ein kleines C-Programm unter geschrieben:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> #include <string.h> int main() { char* szTest = "Hallo schöne Welt"; int i = 0; for(i = 0; i < strlen(szTest); i++) printf("szTest[%i]: %c (0x%.2X)\n", i, szTest[i], szTest[i]); return 0; } |
und mit
gcc -o test test.c
kompiliert. Aber es kommt anscheinend aufgrund des Umlauts "ö" zu folgender merkwürdigen Ausgabe:
szTest[0]: H (0x48) szTest[1]: a (0x61) szTest[2]: l (0x6C) szTest[3]: l (0x6C) szTest[4]: o (0x6F) szTest[5]: (0x20) szTest[6]: s (0x73) szTest[7]: c (0x63) szTest[8]: h (0x68) szTest[9]: � (0xFFFFFFC3) szTest[10]: � (0xFFFFFFB6) szTest[11]: n (0x6E) szTest[12]: e (0x65) szTest[13]: (0x20) szTest[14]: W (0x57) szTest[15]: e (0x65) szTest[16]: l (0x6C) szTest[17]: t (0x74)
Im speziellen verwirren mich die beiden Zeilen:
szTest[9]: � (0xFFFFFFC3) szTest[10]: � (0xFFFFFFB6)
Ich kenne mich mit Charsets und co. nicht so blendend aus. Aber es scheint als wird der Umlaut "ö" (oder Umlaute generell) mit mehr als einem Byte dargestellt, weswegen das hier ziemlich schief geht und strlen beispielsweise 18 zurück gibt, anstatt 17. Wie kann ich das vermeiden und eine "normale" Ausgabe hinkriegen?
Viele Grüße,
STaRDoGGCHaMP