Frage zu sprintf



  • Aus der cppreference:

    char buffer [50];
      int n, a=5, b=3;
      n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
      printf ("[%s] is a string %d chars long\n",buffer,n);
      return 0;
    

    WOher weiß sprintf das Buffer nur 50 Zeichen groß ist? Bei Initialisierung ist der Inhalt von buffer doch undefiniert?



  • Er weiß es nicht.
    Deswegen ist sprintf() auch nicht sicher. Es schreibt munter weiter in den buffer, selbst wenn der Speicher gar nicht mehr zu Buffer gehört.



  • Nathan schrieb:

    Er weiß es nicht.
    Deswegen ist sprintf() auch nicht sicher. Es schreibt munter weiter in den buffer, selbst wenn der Speicher gar nicht mehr zu Buffer gehört.

    Ich sehe auch gerade das snprintf das war was ich gesucht habe. Wofür braucht man dann sprintf???



  • Einfach? Wenn man drauf achtet geht nichts schief?
    Vermutlich aus dem gleichen Grund wie gets(), strcpy() (ohne n), ...
    In C++ ist so eine Vorsicht zum Glück nicht notwendig - wenn man vernünftig programmiert.



  • sprintf ohne %s ist durchaus verwendbar.
    Man muss bloss aufpassen was man tut.
    Besser wäre aber snprintf .


Log in to reply