Escape Sequenzen auswerten
-
Hallo
Ich habe eine Programm geschrieben dass C-Escape Sequenzen in normale Strings wieder zurück verwandelt. Ich frage mich ob es sowas nicht schon fertig gibt und vor allem ob es nicht einfacher geht, hier der Codevoid unescape (char *p) { char *i = "abfnrtv\\\'\""; char *o ="\a\b\f\n\r\t\v\\\'\""; size_t n; char *q = p; int esc = 0; char x; while (*p) { if (esc == 1) { x = *p; esc = 0; for (n=0; n<strlen(i); n++) { if (*p == i[n]) { x = o[n]; break; } } *q++ = x; } else { if (*p == '\\') esc = 1; else *q++ = *p; } p++; } *q = 0; }
-
Hi,
//EDIT falsch geguckt
-
Ich würd zuerst mal sagen, da fehlen mindestens noch die Sequenzen für oktale (\123) und hexadezimale (\x7F) Codes. \? gibts auch noch.
Fertig gibts das sicher schon irgendwo, das braucht man ja ziemlich oft bei Compilern, Interpretern und anderen Tools, die Quellcode parsen. Allerdings nicht in der Standardlibrary, falls du das meintest.
Wirklich einfacher geht das nicht. Allerdings kann man an deinem Programm noch einiges machen. Die Variablennamen find ich indiskutabel. Und die Schleife über die Arrays muss nicht in jedem Durchlauf strlen() auswerten. Und so weiter. Aber der Ansatz ist so richtig.
-
...und bei einer undefinierten escseq, z.b. '\Z' oder sowas wird nur das '\' weggelöscht. ich glaub' das ist auch nicht ganz OK. wenn schon, dann beide zeichen wegmachen und/oder position des fehlers zurückgeben.
btw: ich finde in so'ner kleinen überschaubaren funktion kann man schlechte variablennamen schon mal tolerieren. trotzdem sollte man sich das nicht zur gewohnheit machen
-
net schrieb:
btw: ich finde in so'ner kleinen überschaubaren funktion kann man schlechte variablennamen schon mal tolerieren. trotzdem sollte man sich das nicht zur gewohnheit machen
Ich finde schlechte Variablennamen kann man nie tolerieren. Durch sowas wirds nämlich meistens dann zur Gewohnheit