%s



  • mcr schrieb:

    Du hast im folgenden Fall Recht:

    #define FORMAT "%s\n"
        printf( FORMAT, "%s");
    

    was das gleiche ist wie:

    printf("%s\n", "%s");
    

    Im obigen Beispiel ist der erste String der Formatstring, bei dem das
    "%s" durch den zweiten String ersetzt wird.

    Gruß mcr

    falsch. es müsste schon

    Du hast im folgenden Fall Recht:

    #define FORMAT "%s\n"
        printf( FORMAT, "%%s");
    

    was das gleiche ist wie:

    printf("%s\n", "%%s");
    

    heißen, wenn du den gewünschten effekt haben willst :p



  • Machine schrieb:

    falsch. es müsste schon

    Du hast im folgenden Fall Recht:

    #define FORMAT "%s\n"
        printf( FORMAT, "%%s");
    

    was das gleiche ist wie:

    printf("%s\n", "%%s");
    

    heißen, wenn du den gewünschten effekt haben willst :p

    Sorry, dass ich dich enttäuschen muss. Aber du hast Unrecht:

    #include <stdio.h>
    
    #define FORMAT "%s\n"
    
    int main(void) {
        printf( FORMAT, "%s" );
        printf( FORMAT, "%%s" );
        return 0;
    }
    

    liefert:

    %s
    %%s
    

    Wie du siehst: ich habe Recht.

    Gruß mcr



  • mcr schrieb:

    aber das stimmt hier nicht. Der String, in dem das '%s' steht, ist ein
    Formatstring.

    Falls die Ironie nicht rübergekommen sein sollte:
    In C# gibt es keine Formatstrings mit % als Platzhalter.



  • Machine schrieb:

    falsch. es müsste schon

    Du hast im folgenden Fall Recht:

    #define FORMAT "%s\n"
        printf( FORMAT, "%%s");
    

    was das gleiche ist wie:

    printf("%s\n", "%%s");
    

    heißen, wenn du den gewünschten effekt haben willst :p

    Du bist im Unrecht. Das Steuerzeichen % ist nur im Formatsring der printf/scanf Familie von Bedeutung. Alle andere Zeichen außerhalb des Formatstrings werden 1:1 ausgegeben.



  • Hmm, wieso ergießt ihr Euch derart erschöpfend über Format-Strings? Welche Strings was bedeuten und wie das alles funktioniert kann man bis ins Detail im Netz nachlesen. Weniger als 10s Aufwand bei der Google-Suche.



  • Tachyon schrieb:

    Hmm, wieso ergießt ihr Euch derart erschöpfend über Format-Strings? Welche Strings was bedeuten und wie das alles funktioniert kann man bis ins Detail im Netz nachlesen. Weniger als 10s Aufwand bei der Google-Suche.

    hier ging es schon lange nicht mehr um format strings. hier ging es schlichtweg einfach darum, _wer_ recht hat 😃



  • ui, sorry.. ich hab da grad das % mit dem & verwechselt 😃



  • Machine schrieb:

    ui, sorry.. ich hab da grad das % mit dem & verwechselt 😃

    % mit & verwehselt? Wo denn? da find ich keinen Zusammenhang 😕



  • supertux schrieb:

    Machine schrieb:

    ui, sorry.. ich hab da grad das % mit dem & verwechselt 😃

    % mit & verwehselt? Wo denn? da find ich keinen Zusammenhang 😕

    wenn du in einem string ein & zeichen haben willst, dann musst du zwei & schreiben.

    Bsp:

    CString foo = _T("Video && Fotoshow");
    SetDlgItemText(IDC_ST_FOO, foo);
    

    Da steht dann auf dem Control Video & Fotoshow.



  • Machine schrieb:

    supertux schrieb:

    Machine schrieb:

    ui, sorry.. ich hab da grad das % mit dem & verwechselt 😃

    % mit & verwehselt? Wo denn? da find ich keinen Zusammenhang 😕

    wenn du in einem string ein & zeichen haben willst, dann musst du zwei & schreiben.

    Bsp:

    CString foo = _T("Video && Fotoshow");
    SetDlgItemText(IDC_ST_FOO, foo);
    

    Da steht dann auf dem Control Video & Fotoshow.

    Ja? Also bei mir steht da konkret "Video && Fotoshow".
    Hier der Code:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define IDC_ST_FOO 0
    #define _T(x) x
    
    typedef char* CString;
    typedef unsigned int hokus_pokus_t;
    
    void SetDlgItemText(hokus_pokus_t drolf, CString rolf)
    {
        (drolf % 2)?printf("%s\n", rolf):printf("%s\n", rolf);
    }
    
    int main()
    {
        CString foo = _T("Video && Fotoshow");
        SetDlgItemText(IDC_ST_FOO, foo);
        return 0;
    }
    

    🤡 🤡 😃



  • Machine schrieb:

    CString foo = _T("Video && Fotoshow");
    SetDlgItemText(IDC_ST_FOO, foo);
    

    Da steht dann auf dem Control Video & Fotoshow.

    ??? und was hat das mit C zu tun? Siehe Tachyons ironische Antwort.

    edit: bei GUI Frameworks ist es üblich, dass das Ampersand doppelt vorkommt, wenn man das Zeichen ausgeben will, weil man mit "&Menu" in Menüs/Knöfpe/Formulare/usw das & dazu benutzen kann, um den Buchstaben 'M' zu untertsreichen, damit es so aussieht:

    Menu

    Das hat aber mit C nichts zu tun (wie ich oben geschrieben hab) sondern das ist eine Eigenheit von GUI Frameworks (eher von dieses _T Makros).



  • supertux schrieb:

    ??? und was hat das mit C zu tun?

    SetDlgItemText ist durchaus eine C-funktion
    machste noch:

    #define char* CString
    #define _T
    

    ... und dann sollte es compilen.
    🙂



  • fricky schrieb:

    supertux schrieb:

    ??? und was hat das mit C zu tun?

    SetDlgItemText ist durchaus eine C-funktion
    machste noch:

    #define char* CString
    #define _T
    

    ... und dann sollte es compilen.
    🙂

    es hat insofern mit C nichts zu tun, weil wenn du das &-Zeichen in einer Zeichenkette ausgeben willst, muss das &-Zeichen nicht doppelt vorkommen. Dass GUI Frameworks etwas anders machen, damit Textbuchstaben unterstrichen erscheinen, ist eine andere Sache und hat nicht viel mit C zu tun.



  • Wer hat den jetzt recht ? -.-



  • ich natürlich 🤡



  • ich habe nie was davon gesagt, dass es mit C zu tun hat. ich habe gesagt, ich habe nicht an % sondern & gedacht. dann hat jemand gefragt wie ich das meine, dann hab ichs erklärt. lest erstmal alle beiträge bevor ihr hier rumtrollt. also echt ey. 🙄



  • Dein Beitrag kam aber so rüber, als wäre dieses Verhalten *immer* der Fall.

    wenn du in einem string ein & zeichen haben willst, dann musst du zwei & schreiben.
    *

    darauf haben wir "rumgetrollt" 😉



  • Machine schrieb:

    ich habe nie was davon gesagt, dass es mit C zu tun hat. ich habe gesagt, ich habe nicht an % sondern & gedacht. dann hat jemand gefragt wie ich das meine, dann hab ichs erklärt. lest erstmal alle beiträge bevor ihr hier rumtrollt. also echt ey. 🙄

    👎


Anmelden zum Antworten