OT: warum geht folgendes C Proggi nicht ? Problem mit : wchar_t / char
Hallo allerseits,
gegeben folgendes kleine C Programm:
--------------------------------
#include
Glaube nicht, dass das ein Bug ist. Ein kleine Modifikation des
Programms wirft einen Error:
#include
Am Donnerstag, 1. März 2007 schrieb Juergen Kirschbaum:
Glaube nicht, dass das ein Bug ist.
unter Microsoft Visual Studio scheint's zu gehen.
Ein kleine Modifikation des Programms wirft einen Error:
#include
#include #include int main (int argc, int argv[]) { wchar_t wc = L'a'; char c = 'a'; setlocale (LC_ALL, ""); printf ("1. %lc\n", wc); printf ("2. "); if (WEOF == fputwc (wc, stdout)) printf ("ERROR\n"); printf ("\n"); printf ("3. %c\n", c); printf ("4. "); fputc (c, stdout); printf ("\n"); return 0; }
Ausgabe: 1. a 2. ERROR ----- warum?????
3. a 4. a
Der Wurm liegt also wo anders begraben.
na ja, schau'mer mal. ich werd' halt fprintf beuntzen... Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
Am Donnerstag, 1. März 2007 17:48 schrieb Dr. Jürgen Vollmer:
(...). printf ("2. "); fputwc (wc, stdout); printf ("\n"); (...). warum wird im Fall "2." nichts ausgegeben?????
Ist das ein bug?
"It is important to never mix the use of wide and not wide operations on a stream. There are no diagnostics issued." aus http://frcatel.fri.utc.sk/glibc-doc/libc_12.html Das Problem in deinem Testprogamm ist also, daß du normale und wide-chars mischst. Wenn du mal ausschließlich "fputwc (wc, stdout)" für die Ausgabe nutzt, bekommst du das 'a' zu Gesicht. Alternativ nimm das Makro putwc oder putwchar. HTH Jan -- Who is John Galt? -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Donnerstag, 1. März 2007 schrieb Jan Ritzerfeld:
Am Donnerstag, 1. März 2007 17:48 schrieb Dr. Jürgen Vollmer:
(...). printf ("2. "); fputwc (wc, stdout); printf ("\n"); (...). warum wird im Fall "2." nichts ausgegeben?????
Ist das ein bug?
"It is important to never mix the use of wide and not wide operations on a stream. There are no diagnostics issued." aus http://frcatel.fri.utc.sk/glibc-doc/libc_12.html
Das Problem in deinem Testprogamm ist also, daß du normale und wide-chars mischst. Wenn du mal ausschließlich "fputwc (wc, stdout)" für die Ausgabe nutzt, bekommst du das 'a' zu Gesicht. Alternativ nimm das Makro putwc oder putwchar.
warum sollte es mit putwchar gehen? "This is just like fputwc, except that it can be implement as a macro, making it faster." Danke mal für die Auskunft. Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
Am Donnerstag, 1. März 2007 19:16 schrieb Dr. Jürgen Vollmer:
(...). warum sollte es mit putwchar gehen? "This is just like fputwc, except that it can be implement as a macro, making it faster."
Hier bei mir unter 10.2 ist es anscheinend kein Makro. Ich finde es jedenfalls nicht. Und als ich putwchar statt fputwc probiert habe, kam das 'a' auch ganz brav auf der Konsole. Warum? Keine Ahnung! :-D
Danke mal für die Auskunft.
Hat mich auch ne halbe Stunde testen und googlen gekostet. ;) Gruß Jan -- Delusions are often functional. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Donnerstag, 1. März 2007 schrieb Jan Ritzerfeld:
Hat mich auch ne halbe Stunde testen und googlen gekostet. ;)
Danke, hast was (hier auf der Liste) gut! Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
Am Donnerstag, 1. März 2007 22:36 schrieb Dr. Jürgen Vollmer:
Am Donnerstag, 1. März 2007 schrieb Jan Ritzerfeld:
Hat mich auch ne halbe Stunde testen und googlen gekostet. ;)
Danke, hast was (hier auf der Liste) gut!
Hehe. So war das aber nicht gemeint. Ich freue mich immer über anspruchsvolle Fragen in der Liste. Und ich hätte bestimmt nicht so intensiv nachgesehen, wenn es mich nicht interessiert hätte. Ich programmiere seit 1995 immer mal wieder zwischendurch C, aber hatte von wchar noch nie was gehört. Daher mußte ich das doch direkt mal ausprobieren. :-D Sonst benutz ich halt KDE/Qt und da is eh mehr oder weniger alles automagisch UTF. Gruß Jan -- Many people lose their tempers merely from seeing you keep yours. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Jürgen, Dr. Jürgen Vollmer schrieb:
gegeben folgendes kleine C Programm: -------------------------------- #include
#include #include int main (int argc, int argv[]) { wchar_t wc = L'a'; char c = 'a'; setlocale (LC_ALL, ""); printf ("1. %lc\n", wc); printf ("2. "); fputwc (wc, stdout); printf ("\n"); printf ("3. %c\n", c); printf ("4. "); fputc (c, stdout); printf ("\n"); return 0; } -----------------
Die Ausgabe ist:
1. a 2. 3. a 4. a
warum wird im Fall "2." nichts ausgegeben?????
Interessantes Problem! Es funktioniert, wenn Du "fputwc" durch "putwc" ersetzt. Bleibt die Frage, warum das so ist. Gruss, Peter. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (4)
-
Dr. Jürgen Vollmer
-
GUNREBEN, PETER (Peter)
-
Jan Ritzerfeld
-
Juergen Kirschbaum