snprintf



  • hi leute ich weiss das is ne dumme frage aber, ich habe folgendes problem
    dies zeile code

    (von einem packetsniffer)

    sprintf(pa,"%s",data);

    der pa buffer is nur 90 zeichen gross, jedoch gibts leider auch tcp-packete mit einen payload der grösser is ;=), und ich bekomme immer einen speicher überlauf.

    gibts unter windows auch snprintf ??? oder wie kann ich das ganze auf 90 zeichen begrenezen ?



  • strncpy selbst zu schreiben dürfte nicht das problem sein



  • snprintf() ist seit C99 Standard. Funktionen mit dem gleichen Zweck gabs zwar vorher auch schon, wurden aber von der stdlib nur intern (zB für sprintf()) benutzt. Damit kann man die Länge begrenzen. Geht aber auch so:

    sprintf(pa,"%.90s",data);
    

    oder

    sprintf(pa,"%.*",90,data);
    

    Der Rückgabewert ist int und gibt die Anzahl der in pa gespeicherten Zeichen zurück. Ein negativer Wert zeigt glaub ich einen Fehler an (schau mal in der Doku zu sprintf nach).



  • snprint und sprintf ist doch käse. was hier gebraucht wird ist

    1. strcpy/strncpy
      oder
    2. realloc


  • snprint und sprintf ist doch käse

    Kann ich dir nur Recht geben. Die machen eigentlich nur Sinn, wenn
    1. mehrere Parameter unterschiedlichen Typs in einen String gepackt werden sollen
    2. die daraus resultierende Länge des Strings absehbar ist (zumindest bei sprintf)

    Wenn es sich um reine Nutzdaten handelt, ist es besser (und schneller) statt den str-Funktionen die mem-Funktionen (also memcpy etc.) zu nutzen.

    [ Dieser Beitrag wurde am 21.03.2003 um 09:57 Uhr von groovemaster2002 editiert. ]


Anmelden zum Antworten