Wie andere gesagt haben, brauchen Sie in diesem Fall nicht die -1. Wenn das Array eine feste Größe hat, würde ich stattdessen strncpy
verwenden. Es wurde für das Kopieren von Zeichenfolgen erstellt - sprintf
wurde für schwierige Formatierung erstellt. Wenn jedoch die Größe des Arrays unbekannt ist oder Sie versuchen zu ermitteln, wie viel Speicher für eine formatierte Zeichenfolge erforderlich ist. Dies ist, was ich wirklich wie über die Standard-Version von snprintf
angegeben:
char* get_error_message(char const *msg) {
size_t needed = snprintf(NULL, 0, "%s: %s (%d)", msg, strerror(errno), errno);
char *buffer = malloc(needed+1);
sprintf(buffer, "%s: %s (%d)", msg, strerror(errno), errno);
return buffer;
}
Kombinieren Sie diese Funktion mit va_copy
und Sie können sehr sicher formatiert String-Operationen erstellen.
Randbemerkung: GCC nicht C99 unterstützt: http: // gcc. gnu.org/c99status.html –
Ist Ihnen jedoch eine moderne Umgebung bekannt, in der die gcc - und Standardbibliotheks - Kombination "snprintf" nicht enthält? – LnxPrgr3
Als ich vor ein oder zwei Jahren MinGW verwendet habe, hat es tatsächlich Microsofts '_snprintf()' aufgerufen, das sich nicht wie der Standard 'snprintf()' verhält (ich glaube, es wird die Zeichenkette nicht immer beenden). –