Was ist der Unterschied zwischen _itoa und itoa?

8

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?

    
Polaris878 19.10.2009, 02:47
quelle

5 Antworten

19

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.

    
Michael Burr 19.10.2009, 05:57
quelle
8

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 .

    
Greg Hewgill 19.10.2009 02:52
quelle
5

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.

    
Robert Massaioli 19.10.2009 02:53
quelle
4

itoa ist kein Standard, daher sollten Sie stattdessen stringstream verwenden.

Sie brauchen #include <sstream>

Ein Beispiel für die Verwendung wäre:

%Vor%     
Corey 19.10.2009 03:03
quelle
1

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%     
kotarou3 27.10.2009 10:00
quelle

Tags und Links