Generische Zeichen (Petzold)



  • Ich hoffe, dass diese Frage nicht zu sehr philosophischer Natur ist.. (und ich hab mich mental darauf eingestellt, dass jemand nachdruecklich UNICODE schreien wird)
    ABER: Ich arbeite mich gerade durch den Petzold und darin wird ja schon von Anfang an auf Unicode-Zeichensaetze und co. eingegangen. Benutzt wird aber durchgehend der generische Zeichentyp TCHAR. Vorerst war das kein Problem, an Hand des Beispiels wsprintf() wird einem ja auch klargemacht wie schoen das ganze funktioniert.

    Allerdings hab ich bei den meisten anderen Methoden nicht so viel Glueck gehabt.
    Wo ist ein scanf fuer generische Zeichen, oder auch nur ein strcpy?
    Die Methoden fuer wchar_t bzw char sind alle kein Problem, ich vermisste nur die generischen Versionen. Ist das Konzept ueberholt, oder tu ich mich nur schwer beim Suchen ?



  • Wenn Du TCHAR verwendest, dann solltest Du auch alle anderen Funktionen verwenden, welche auf TCHAR basieren (die WinAPI macht das schon automatisch). Dies Betrifft eigentlich nur die CRT-Funktionen. Hier musst Du immer die tchar-Varainte nehmen. Genaueres musst Du aus der Doku zu den einzelnen Funktionen entnehmen (oder in tchar.h reinschauen). Also z.B:
    strcpy => _tcscpy
    strlen => _tcslen
    printf => _tprintf
    scanf => _tscanf



  • Aha, jetzt merk ich was mich verwirrt hat:
    Die Funktion _tcscpy erwartet natuerlich einen TCHAR*. Da ich Visual Studio benutze und mich auf IntelliSense verlassen habe, bin ich davon ausgegangen das ich auch ein TCHAR* als Parameter angezeigt bekomme. Aber Visual Studio ersetzt die Methode direkt durch das per #define vorgegebene Aequivalent, sodass ich nur Parameter com Typ char* bzw wchar_t* zu sehen bekomme. Dies haengt dummerweise vom letzen Compilevorgang und nicht von der aktuellen Einstellung ab.

    Komischerweise ist auch nur ein Teil der generischen Funktionen in tchar.h definiert, wsprintf versteckt sich in winuser.h.



  • strcpy => lstrcpy
    strlen => lstrlen



  • Jochen Kalmbach schrieb:

    strcpy => ****tcscpy
    strlen => **
    **tcslen
    printf => ****tprintf
    scanf => **
    **tscanf

    Der Unterstrich signalisiert doch die Erweiterung des ANSI-C-Standards, oder?



  • Es ist einfach eine "Eigendefinition" von MS. Deshalb der Unterstrich (um zwischen ANSI-C Funktionen und anderen zu unterscheiden).


Anmelden zum Antworten