sprintf



  • Hallo,

    ich habe eine Frage zu sprintf.
    Ich will den String "abcdefg" mit sprintf an buffer anhängen. Ist folgender funktionsaufruf sicher?
    sprinf(buffer, "%sabcdefg", buffer);

    Oder muss ich vorher eine Kopie von Buffer machen:
    strcpy(buffer2, buffer);
    sprinf(buffer, "%sabcdefg", buffer2);

    mfg,
    Roman



  • Dafuer gubt es strcat, bzw. strncat:

    strcat (buffer, "abcdefg");
    


  • benutze die zweite Variante

    man sprintf schrieb:

    C99 and POSIX.1-2001 specify that the results are undefined if a call to sprintf(), snprintf(), vsprintf(), or vsnprintf() would cause to copying to take place between objects that overlap (e.g., if the target string array and one of the supplied input arguments refer to the same buffer).

    edit: hartmuts Vorschlag ist sogar besser 😉



  • Roman83 schrieb:

    Hallo,

    ich habe eine Frage zu sprintf.
    Ich will den String "abcdefg" mit sprintf an buffer anhängen. Ist folgender funktionsaufruf sicher?

    sprinf(buffer, "%sabcdefg", buffer);
    

    Ja, aber leider nicht so ganz ergebnisorientiert. Du suchst nach strcat, besser nach strncat ... 😉

    EDIT: Warn ja schon wieder alle andern schneller 😞



  • danke für die antworten.
    strcat und strncat sind mir bekannt. ich bin auf der suche nach einem fehler in einer software und frage mich ob der fehler an diesem funktionsaufruf liegen kann. es scheint zwar zumindest in 99,999% aller Fälle das gewünschte Ergebnis zu liefern, allerdings war ich mir nicht sicher ob es durch bestimmte Umstände zu stack buffer overflows kommen kann. Laut supertux's Antwort scheint das ja auch so zu sein.

    mfg,
    Roman


Log in to reply