Kompletten Dump eines char*
-
void dump(char *p) { while (*p) printf("\\x%x", *p++); }
-
GmbH schrieb:
.. Muß man dies alles manuell irgendwie maskieren...
Ja.
for ( i = dings, bis i = bums, i+= mehr )
...
if ( i gleich zehn ) printf("%s", "'\\n'" );
-
if ( i gleich zehn ) printf("%s", "'\\n'" );
-
for(i=0;i<256;i++) { switch(i) { case 10: printf("%s","\\n"); case 13: printf("%s","\\r"); case 27: printf("%s","ESC"); //... default: printf("%i",i); } }
-
GmbH schrieb:
Muß man dies alles manuell irgendwie maskieren
Yes.
-
Muß man dies alles manuell irgendwie maskieren
Um Gottes Willen, Nein! Siehe oben. Dann hast du eben "\x0d" statt "\n". Aber printf würde es auch so verstehen.
Du kannst ctype.h zur Hilfe nehmen, um zumindest Zahlen und Buchstaben vom Maskieren auszuschließen:
include <ctype.h> // isgraph() void dump(char *p) { for (; *p; p++) printf(isgraph(*p) ? "\\x%x" : "%c", *p); }
Die Handvoll Zeichen, die einen "Kurzcode" wie \n oder \t haben, kannst du dann immer noch abfangen. Sehe aber die Notwendigkeit dazu nicht.
-
"Zahlen und Buchstaben" ist Blödsinn; isgraph() prüft auf Darstellbarkeit.
-
flamer schrieb:
[Dann hast du eben "\x0d" statt "\n"...
lesen will geübt sein, extra für dich eine kleine leseübung, ( nicht so schwer ):
GmbH schrieb:
... sondern in der Konsole lesen "\n" ...
flamer schrieb:
Sehe aber die Notwendigkeit dazu nicht.
der threadersteller aber offensichtlich schon.
-
Da war noch eine fehlerhafte Negation im printf.
Richtig wär es so:#include <ctype.h> void dump(const char *p) { for (; *p; p++) { if (isgraph(*p)) putchar(*p); else switch (*p) { case '\n': printf("\\n"); break; case '\t': printf("\\t"); break; case '\r': printf("\\r"); break; case '\f': printf("\\f"); break; case '\v': printf("\\v"); break; case ' ': printf(" "); // das ist alles, was man 'händisch' maskieren muss default: printf("\\x%x", *p); } } }
Dafür hab ich mir ein Bier verdient, oder?
-
break, break, break!
-
du hast das anliegen vom threadersteller noch nicht vollständig kapiert, bist aber sehr nah dran