printf %p %n



  • Servus,

    Wenn ich etwas in der Informatik angehe, versuche ich es mir immer vorzustellen. Ich habe printf näher angeschaut, bzw. format strings, und ich habe %n gesehen. Im zusammenhang mit format string attacks, werden %n häufig verwendet. Als erstes suchte ich in diversen Referenzen,

    bei http://www.cplusplus.com/ref/cstdio/printf.html steht z.B. bei %n

    %n -> Nothing printed. The argument must be a pointer to integer where the number of characters written so far will be stored.
    

    Allerdings kann ich mir daraus keinen Reim machen. Kann mir das jemand bitte erklären, was es macht, wo es das macht und wie es vor sich geht bzw. wie es ausschaut?

    Wo benötigt man sowas in der Regel auch (ausser fmt attacks)?

    Vielen Dank,

    DelthaClownNr1



  • Habs jetzt rausgefunden. Mich interessiert aber, wo man das in der Praxis (sonst) einsetzen kann, oder üblicherweise tut?



  • DelthaClownNr1 schrieb:

    ...wo man das in der Praxis (sonst) einsetzen kann...

    z.b. um auf besonders exotische art die anzahl der ziffern einer zahl zu ermitteln:

    int num_of_digits (int x)
    {
       char tmp[32];
       int digits;
       sprintf (tmp, "%d%n", x, &digits);
       return digits;
    }
    

    😉 :xmas2:



  • Hm...??

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int num_of_digits (int x) 
    { 
       char tmp[32]; 
       int digits; 
    
       sprintf (tmp, "%d%n", x, &digits); 
    
       return digits; 
    } 
    
    int main(int argc, char **argv)
    {
        int res, i=5;
    
        res = num_of_digits(i);
        printf("Digits: %d\n", res);
        system("Pause");
        return 0;
    }
    

    Egal was, es gibt immer 1.

    1
    

    danke



  • DelthaClownNr1 schrieb:

    Egal was, es gibt immer 1.

    ja, bei 0...9 aber probier doch mal 5755648 oder sowas...



  • Ah, jetzt kapier ichs erst. Tut mir leid, bin so geboren. danke.


Log in to reply