Mit snprintf in einen cross-Plattform-Anwendung

Ich Schreibe ein C-Programm zu erwarten ist zusammengestellt mit allen wichtigen Compilern. Derzeit bin ich die Entwicklung von GCC auf einem linux-Rechner und kompiliert auf MSVC, bevor der code. Um die cross-Kompilierung einfach, ich bin kompilieren mit -ansi und -pedantic flags. Dies funktionierte gut, bis ich begann mit snprintf ist nicht verfügbar in der C89-standard. GCC kompilieren kann, ohne dass das -ansi - Schalter, aber MSVC scheitern wird immer als es nicht C99-Unterstützung.

Also ich hatte sowas wie,

#ifdef WIN32 
#define snprintf sprintf_s
#endif

Dies funktioniert gut, weil snprintf und sprintf_s hat die gleichen Signaturen. Ich Frage mich, ist das der richtige Ansatz?

nicht snprintf standard für alle C in jeder Plattform?
Nein. snprintf ist Teil der C99-standard. MSVC nicht C99-Implementierung.
sprintf_s ist nicht gleichwertig. snprintf gibt die Anzahl der Zeichen, wäre geschrieben worden, während sprintf_s gibt -1 zurück, auf das abschneiden. Siehe diese Diskussion.
Siehe Antwort von ähnlichen post link

InformationsquelleAutor Navaneeth K N | 2010-10-20

Schreibe einen Kommentar