Der folgende Code verursacht einen Fehler und tötet meine Anwendung. Dies ist sinnvoll, da der Puffer nur 10 Byte lang ist und der Text 22 Byte lang ist (Pufferüberlauf).sprintf_s mit einem Puffer zu klein
Wie erhalte ich diesen Fehler, damit ich es melden kann, anstatt meine Anwendung zu stürzen?
Edit:
Nach dem Lesen der Kommentare unten ich mit _snprintf_s ging. Wenn es einen Wert -1 zurückgibt, wurde der Puffer nicht aktualisiert.
length = _snprintf_s(buffer, 10, 9, "123456789");
printf("1) Length=%d\n", length); // Length == 9
length = _snprintf_s(buffer, 10, 9, "1234567890.1234567890.");
printf("2) Length=%d\n", length); // Length == -1
length = _snprintf_s(buffer, 10, 10, "1234567890.1234567890.");
printf("3) Length=%d\n", length); // Crash, it needs room for the NULL char
Das Übergeben der Puffergröße und der Puffergröße minus eins ist stumpf und fehleranfällig. Sie sollten die unten beschriebene Variante bevorzugen: length = _snprintf_s (Puffer, _TRUNCATE, "1234567890.1234567890."); Da der erste Größenparameter weggelassen wird, verwendet der Compiler die Template-Überladung, die die Größe ableitet. _TRUNCATE ist ein besonderer Wert, der das leistet, was er sagt. Keine magischen Zahlen, und jetzt ist Ihr Code sicher, wartbar und ein gutes Beispiel. Wenn Sie diesen Kommentar und _snprintf_s mögen, dann sollten Sie meine Antwort anstelle der gefährlichen snprintf/_snprintf Antwort auswählen. –