2013-07-17 23 views
6

Jemand sagte mir, dass ich atoi() nicht verwenden sollte, und dass ich stattdessen immer strtol() verwenden sollte. Was ist los mit atoi(), dass ich es nicht verwenden sollte? Ist strtol() wirklich das Richtige, um stattdessen zu verwenden? (Und was ist mit der Tatsache, dass strtol() gibt ein long, kein int wie atoi() tut?)Warum sollte ich atoi() nicht verwenden?

+0

Hinweis: Ich weiß ganz genau, warum ich 'atoi()' nicht benutzen soll. Während ich jedoch Fragen darüber sehe, wie man 'atoi()' verwenden kann, die erklären, warum ich es nicht verwende, konnte ich diese direkte Frage nicht finden, und ich denke, es wäre nützlich, die Frage und die Antwort miteinander verknüpft zu haben richtig als Paar. –

+0

(Ich bin auch neugierig zu sehen, was Antworten Leute kommen. Variation kann interessant sein.) –

+1

Wurde das nicht zu Tode diskutiert? Haben Sie sich ein bisschen auf dieser Website umgesehen? –

Antwort

16

von Ihrem eigenen link:

Die atoi() Funktion von strtol subsumiert(), aber erhalten bleibt, weil Es wird weitgehend in vorhandenem Code verwendet. Wenn bekannt ist, dass die Anzahl nicht im Bereich liegt, sollte strtol() verwendet werden, da atoi() keine Fehlerprüfung durchführen muss.

Oder

atoi veraltet

4

Mit dem atoi gibt es keine Möglichkeit herauszufinden, ob die übergebene Zeichenfolge wirklich eine Zahl ist, da es keine spezielle Fehler „Rückkehr“. Es behandelt auch nur Dezimalwerte (Basis 10) und kann daher keine beliebigen Basen wie z.B. strtol. Es kann auch nicht mit Werten umgehen, die größer als die ganze Zahl mit Vorzeichen sind (32 Bit auf den meisten Plattformen).

4

Wenn der String sehr groß ist und nicht konvertiert werden kann, führt dies zu undefiniertem Verhalten, da der Wert dieser Zeichenfolge zu groß sein kann und sich möglicherweise nicht im Bereich befindet. In solchen Fällen (Nummer ist nicht bekannt im Bereich) sollte strtol() verwendet werden.

Verwandte Themen