Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
mclien
- Beiträge: 2468
- Registriert: 06.12.2005 10:38:46
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Baustelle
Beitrag
von mclien » 26.10.2009 15:03:22
Quäle mich hier gerade mit c (und später c++) rum:
nun soll mir folgendes Listing:
/*
*/
#include <stdio.h>
int main(void) {
int i;
for(i=0; i < 254; i++) {
if(i==27) // ESC-Zeichen ignorieren
continue;
printf(" |%d : %c| ",i,i);
}
return 0;
}
eigendlich den erweiterten iso_asscii Zeichensatz wiedergeben. Aber zu sehen bekomme ich nur die 127 ascii Zeichen.
Habe Lenny installiert mit LANG=en_UTF-8
Muss ich dem gcc noch irgendwei den ZEichensattz mitgeben?
-
gms
- Beiträge: 7798
- Registriert: 26.11.2004 20:08:38
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von gms » 26.10.2009 16:19:06
setlocale hat dir gefehlt ( ansonsten verwendet C die "C" Locale ) und printf war auch nicht korrekt:
edit: ich wollte eigentlich noch dazu sagen, daß das sehr wenig mit utf-8 zu tun hat
( die Zahlen spiegeln die Unicode und nicht die utf-8 Kodierung wieder )
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(void) {
int i;
setlocale(LC_ALL, "");
for(i=0; i < 254; i++) {
if(i==27) // ESC-Zeichen ignorieren
continue;
printf(" |%d : %lc| ",i,(wchar_t)i);
if (i%4==0)
printf("\n");
}
return 0;
}
Code: Alles auswählen
gms@gms1 ~ $ gcc -o x x.c && ./x
|0 : |
|1 : | |2 : | |3 : | |4 : |
|5 : | |6 : | |7 : | |8 :|
|9 : | |10 :
| |11 :
| |12 :
|
| |14 : | |15 : | |16 : |
|17 : | |18 : | |19 : | |20 : |
|21 : | |22 : | |23 : | |24 : ▒|
|25 : | |26 : ▒| |28 : |
|29 : | |30 : | |31 : | |32 : |
|33 : !| |34 : "| |35 : #| |36 : $|
|37 : %| |38 : &| |39 : '| |40 : (|
|41 : )| |42 : *| |43 : +| |44 : ,|
|45 : -| |46 : .| |47 : /| |48 : 0|
|49 : 1| |50 : 2| |51 : 3| |52 : 4|
|53 : 5| |54 : 6| |55 : 7| |56 : 8|
|57 : 9| |58 : :| |59 : ;| |60 : <|
|61 : =| |62 : >| |63 : ?| |64 : @|
|65 : A| |66 : B| |67 : C| |68 : D|
|69 : E| |70 : F| |71 : G| |72 : H|
|73 : I| |74 : J| |75 : K| |76 : L|
|77 : M| |78 : N| |79 : O| |80 : P|
|81 : Q| |82 : R| |83 : S| |84 : T|
|85 : U| |86 : V| |87 : W| |88 : X|
|89 : Y| |90 : Z| |91 : [| |92 : \|
|93 : ]| |94 : ^| |95 : _| |96 : `|
|97 : a| |98 : b| |99 : c| |100 : d|
|101 : e| |102 : f| |103 : g| |104 : h|
|105 : i| |106 : j| |107 : k| |108 : l|
|109 : m| |110 : n| |111 : o| |112 : p|
|113 : q| |114 : r| |115 : s| |116 : t|
|117 : u| |118 : v| |119 : w| |120 : x|
|121 : y| |122 : z| |123 : {| |124 : ||
|125 : }| |126 : ~| |127 : | |128 : |
|129 : | |130 : | |131 : | |132 : |
|133 : | |134 : | |135 : | |136 : |
|137 : | |138 : | |139 : | |140 : |
|141 : | |142 : | |143 : | |144 : |
|145 : | |146 : | |147 : | |148 : |
|149 : | |150 : | |151 : | |152 : |
|153 : | |154 : | |155 : |156 : |
|157 : | |158 : | |159 : | |160 : |
|161 : ¡| |162 : ¢| |163 : £| |164 : ¤|
|165 : ¥| |166 : ¦| |167 : §| |168 : ¨|
|169 : ©| |170 : ª| |171 : «| |172 : ¬|
|173 : | |174 : ®| |175 : ¯| |176 : °|
|177 : ±| |178 : ²| |179 : ³| |180 : ´|
|181 : µ| |182 : ¶| |183 : ·| |184 : ¸|
|185 : ¹| |186 : º| |187 : »| |188 : ¼|
|189 : ½| |190 : ¾| |191 : ¿| |192 : À|
|193 : Á| |194 : Â| |195 : Ã| |196 : Ä|
|197 : Å| |198 : Æ| |199 : Ç| |200 : È|
|201 : É| |202 : Ê| |203 : Ë| |204 : Ì|
|205 : Í| |206 : Î| |207 : Ï| |208 : Ð|
|209 : Ñ| |210 : Ò| |211 : Ó| |212 : Ô|
|213 : Õ| |214 : Ö| |215 : ×| |216 : Ø|
|217 : Ù| |218 : Ú| |219 : Û| |220 : Ü|
|221 : Ý| |222 : Þ| |223 : ß| |224 : à|
|225 : á| |226 : â| |227 : ã| |228 : ä|
|229 : å| |230 : æ| |231 : ç| |232 : è|
|233 : é| |234 : ê| |235 : ë| |236 : ì|
|237 : í| |238 : î| |239 : ï| |240 : ð|
|241 : ñ| |242 : ò| |243 : ó| |244 : ô|
|245 : õ| |246 : ö| |247 : ÷| |248 : ø|
|249 : ù| |250 : ú| |251 : û| |252 : ü|
|253 : ý| gms@gms1 ~ $
Gruß
gms
-
mclien
- Beiträge: 2468
- Registriert: 06.12.2005 10:38:46
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Baustelle
Beitrag
von mclien » 27.10.2009 14:15:13
gms hat geschrieben:setlocale hat dir gefehlt ( ansonsten verwendet C die "C" Locale ) und printf war auch nicht korrekt:
edit: ich wollte eigentlich noch dazu sagen, daß das sehr wenig mit utf-8 zu tun hat
( die Zahlen spiegeln die Unicode und nicht die utf-8 Kodierung wieder )
Habe ich mir schon fast gedacht, leider war meine Literatur auch nicht besonders hilfreich in diesem Punkt
Kann man sich eine Umgebung einrichten, daß C das nicht noch extra gesagt werden muß?
(wird in dem Beispiel nähmlich komplett unterschlagen.
Jedenfalls vielen Dank
das
geht bei mir auch so:
Wieso bzw. was spricht dagegen das wegzu lassen?
-
gms
- Beiträge: 7798
- Registriert: 26.11.2004 20:08:38
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von gms » 27.10.2009 17:57:39
mclien hat geschrieben:
Kann man sich eine Umgebung einrichten, daß C das nicht noch extra gesagt werden muß?
(wird in dem Beispiel nähmlich komplett unterschlagen.
du meinst das "setlocale" ? Nein, daran führt kein Weg vorbei, wenn du nicht mit der "C"-Locale auskommst. ( außer du verwendest ein Toolkit/Library..., was das für dich erledigt )
mclien hat geschrieben:
das
geht bei mir auch so:
Wieso bzw. was spricht dagegen das wegzu lassen?
gerade bei Funktionen wie printf sollte man peinlich darauf achten, den richtigen Datentyp zu verwenden. Nicht unter jeder Architektur ist 'int' und 'wchar_t' gleich lang ( z.B unter Win32 hat 'int' eine Länge von 4 Byte und 'wchar_t' eine Länge von 2 Byte ). Der gleiche Code unter Windows kompiliert wäre daher fehlerhaft und solche Fehler sind im nachhinein oft sehr schwer zu finden.
Gruß
gms