Nach http://linux.die.net/man/3/sprintf und http://www.cplusplus.com/reference/cstdio/sprintf/sprintf()
und Familie geben Sie die Anzahl der Zeichen bei Erfolg geschrieben. Bei einem Fehler wird ein negativer Wert zurückgegeben. Ich würde annehmen, dass ein Fehler auftreten könnte, wenn die Formatzeichenfolge fehlerhaft ist, so dass ein negativer Rückgabewert etwas anderes als einen malloc()
Fehler anzeigen kann. Wird errno
gesetzt, um anzuzeigen, was der Fehler war?Sprintf() negativen Rückgabewert und errno
Antwort
C++ aufschiebt bis C und C erfordert nicht oder erwähnen errno
in der Beschreibung von sprintf()
und Familie (obwohl für bestimmte Formatbezeich werden diese Funktionen definiert mbrtowc()
zu nennen, welche EILSEQ
in errno
gesetzt werden)
POSIX erfordert, dass errno gesetzt:
Wenn ein Ausgang Fehler aufgetreten ist, werden diese Funktionen einen negativen Wert zurück und setzen
errno
den Fehler anzuzeigen.
EILSEQ, EINVAL, EBADF, ENOMEM, EOVERFLOW explizit erwähnt: http://pubs.opengroup.org/onlinepubs/9699919799/functions/fprintf.html
ich immer wie die "ausprobieren" -Methode, wenn ich eine Frage wie diese.
char buffer[50];
int n, localerr = 0;
n = sprintf(buffer, "%s", "hello");
localerr = errno; // ensure printf doesn't mess with the result
printf("%d chars\nerrno: %d\nstrerror:%s\n", n, localerr, strerror(localerr));
> 5 chars
errno: 0
strerror: Success
n = sprintf(buffer, NULL, NULL);
localerr = errno;
printf("%d chars\nerrno: %d\nstrerror:%s\n", n, localerr, strerror(localerr));
> -1 chars
errno: 22
strerror: Invalid argument
Sieht aus wie es beim Kompilieren mit gcc auf Linux gesetzt wird. Also das sind gute Daten, und in der man page für errno
es erwähnt, dass printf()
(gleiche Familie wie sprintf()
) errno
(in den Beispielen auf der Unterseite) ändern können.
- 1. Kann nicht erhalten korrekte Rückgabewert in sprintf Funktionsaufruf
- 2. C: Sprintf und Rekursion
- 3. Konflikt mit Stil und Sprintf
- 4. Sprintf() Fehler
- 5. Segmentierungsfehler - sprintf
- 6. Clojure sprintf?
- 7. Sprintf mit Zeigern, Konstanten und String-Formatierung
- 8. Unterschied zwischen fprintf, printf und sprintf?
- 9. number_format und sprintf für die gleiche Variable
- 10. sprintf und unsigned int array in C
- 11. Matlab ShortEng Zahlenformat über sprintf() und fprintf()?
- 12. Füllzeichen im $ Format von sprintf und printf.
- 13. SPRINTF in Shell-Skripten?
- 14. PHP Sprintf Space Padding
- 15. Sprintf entspricht in Mathematica?
- 16. sprintf ungültigen Format '% d'
- 17. C - Wie funktioniert sprintf()?
- 18. C - sprintf Druck Variablenname
- 19. Segmentation Fault mit Sprintf
- 20. sprintf eine LPCWSTR Variable
- 21. sprintf in C#?
- 22. falsche Verwendung von sprintf?
- 23. Drucken Gravatar mit Sprintf
- 24. Sprintf-Entsprechung in Java
- 25. strcat() vs sprintf()
- 26. Sprintf doppelte Wert
- 27. Anpassbare Implementierung von sprintf()
- 28. MySQL LIKE + php sprintf
- 29. Übereinstimmung mit negativen und positiven Dezimalstellen?
- 30. zwischen negativen Werten und unsigned ints
+1 für den Beweis, aber Cubbis Antwort fand konkretere Dokumentation. – cpburnz
Beachten Sie, dass die "try-out" -Methode darauf basiert, dass die Implementierung standardkonform ist und der Standard keinen Spielraum für unterschiedliches Verhalten bietet. Manchmal kann diese Methode Sie irreführen ... – skyking