Visual Studio schreit mich an, dass ich itoa () verwende, um stattdessen _itoa zu verwenden? Es sieht für mich so aus, als wären sie die gleiche Funktion ... was gibt's?
Eine C-Laufzeitbibliotheksimplementierung soll keine Namen einführen, die nicht im Standard enthalten sind, es sei denn, sie folgen einer bestimmten Namenskonvention (wie zB mit einem Unterstrich). Die früheren Versionen des Compilers von Microsoft haben diese Regel nicht besonders genau befolgt, aber im Laufe der Zeit hat sich Microsoft mehr darauf konzentriert, die Implementierung standardkonformer zu gestalten. Also Funktionen, die sie zur Verfügung gestellt haben, die in den Namespace des Benutzers eindringen würden, den sie implementiert haben, indem sie Namen verwenden, die für Compilerimplementierungen reserviert sind und die alten Namen ablehnen.
Wenn _CRT_NONSTDC_NO_WARNINGS
definiert ist, wird sich der MS-Compiler nicht darüber beschweren, dass die itoa()
-Funktion veraltet ist. Aber es wird sich immer noch beschweren, dass es unsicher ist (Sie müssen _CRT_SECURE_NO_WARNINGS
definieren, um diese Warnung zu deaktivieren). Oder verwenden Sie die sicherere Version der Funktion ( _itoa_s()
), die der Funktion die Zielpuffergröße bereitstellt
Sowohl _itoa()
als auch itoa()
werden auf dieselbe Funktion in der Bibliothek bis zur selben Adresse aufgelöst - es gibt keinen Unterschied außer im Namen.
Die MSDN-Dokumentation für itoa()
lautet:
Diese POSIX-Funktion ist ab Visual C ++ 2005 veraltet. Verwenden Sie stattdessen das ISO-C ++ - konforme
_itoa
oder das sicherheitsverbesserte_itoa_s
.
Itoa ist kein Standard C.
"Diese Funktion ist nicht in ANSI-C definiert und gehört nicht zu C ++, wird aber von einigen Compilern unterstützt." - cplusplus.com
Also sagt Ihnen MSVS, dass Sie das _itoa verwenden sollen, um Ihnen zu sagen, dass es kein Standard-C ++ ist und dass Sie es als solches markieren sollten. Ich glaube, dass es für Rückwärtskompatibilität da ist und dass diese Notation für Lesbarkeit und Unterscheidung ist.
Als Antwort auf die Antwort von Bruce:
itoa
ist kein Standard, daher sollten Sie stattdessen stringstream verwenden.Sie brauchen
#include <sstream>
Ein Beispiel für die Verwendung wäre:
int i = 5;
std::stringstream ss;
ss << i;
std:: cout << ss.str();
Sie können stattdessen auch Ihre eigene itoa()
-Funktion programmieren
zB:
%Vor%Tags und Links c c++ visual-studio