Wie ist die zu erwartende Ausgabe?



  • Hallo
    Ich bin leider neu und weiß nicht ob Ich hier richtig bin.
    Meine Frage wäre, wie die zu erwartende Ausgabe für folgenden Code ist.

    uint8_t target[100];
    vp1 = (void *) 0xaffe;
    vp2 = (void *) 0x89abcdef;
    mysprintf((char *) target, "%p|%p",vp1,vp2);
    

    Ich habe versucht eine Spezifikation zu finden in der Ich nachlesen kann wie der Output aussehen sollte.

    Momentan ist mein Output für meine selbst erstellte sprintf "0xaffe|0x89abcdef"
    Ist die Ausgabe Standardkonform oder liegt es im ermessen des Programmieres?

    mysprintf soll sich verhalten wie das normale sprintf.
    Vielen Dank



  • Neuling in C schrieb:

    Momentan ist mein Output für meine selbst erstellte sprintf "0xaffe|0x89abcdef"
    Ist die Ausgabe Standardkonform oder liegt es im ermessen des Programmieres?

    Mit selbst erstellt meine Ich ab-/umgeschrieben. 🙄 sollte Ich vllt noch anfügen



  • Neuling in C schrieb:

    Hallo

    Hallo !

    Neuling in C schrieb:

    mysprintf((char *) target, "%p|%p",vp1,vp2);
    

    Damit definierst du quasi deinen eigenen Standard. Oder meinst du, das für jede mögliche Formatierung irgendwo ein Standard geschrieben steht ?

    Neuling in C schrieb:

    mysprintf soll sich verhalten wie das normale sprintf.

    "0xaffe|0x89abcdef"
    So wäre auch die Ausgabe vom 'normalen' sprintf.
    Warum nicht gleich das normale nehmen ? 😕



  • wieso nimmst du zum speichern uint8_t target[100];
    wieso kein char array ?? 😕



  • Hi, Danke erstmal für die Antworten.

    Nun Ich frage weil Ich anstatt mysprintf mal sprintf verwendet habe und der trägt mir in target nur "affe|89abcdef" ein ohne die "0x".
    Das sprintf das ich verwendet habe stammt aus der Dinkumware Library.

    Aber was mich eigentlich interessiert hat, und wenn Ich mal auf eure Antworten sehe, ist der Standard also mit "0x" also geht scheinbar in meiner Version der Dinkumware etwas schief oder ist die Ausgabe ohne "0x" auch zulässig?



  • hi !
    hilft dir das weiter:

    int num = 0xAABBCCDD;
    	char buf[100];
    	sprintf( buf, "0x%X", num );
    	puts(buf);
    

    ?

    🙂



  • Im C99-Standard steht für %p:
    "The argument shall be a pointer to void. The value of the pointer is
    converted to a sequence of printing characters, in an implementation-defined
    manner."
    Das Verhalten muss also sinnvoll und dokumentiert sein, ist ansonsten nicht festgelegt.


Anmelden zum Antworten