2016-12-21 11 views

Antwort

7

Die Funktion atoi nimmt an, dass die Zeichenfolge die dezimale Darstellung einer Zahl ist. Wenn Sie von verschiedenen Basen konvertieren möchten, verwenden Sie strtol.

mode = strtol(argv[2], NULL, 0); 

Das dritte Argument gibt die Zahlbasis an. Wenn dieser Wert 0 ist, wird die Zeichenfolge als hexadezimal behandelt, wenn sie mit 0x beginnt, oktal, wenn sie mit 0 beginnt, und ansonsten dezimal.

Wenn Sie die Zeichenfolge immer die Oktaldarstellung erwarten, stellen Sie dann die Basis 8.

mode = strtol(argv[2], NULL, 8); 
+4

Und das dritte Argument ist besonders wichtig hier, weil die herkömmliche Darstellung für numerische Modi oktal ist, ob es eine führende Null gibt oder nicht. Die Konvertierung einer numerischen Moduszeichenfolge, so als ob sie in Dezimalzahlen ausgedrückt würde, führt wahrscheinlich zu einem unbeabsichtigten Ergebnis. –

+0

Sowohl mode = strtol (argv [2], NULL, 8) und mode = strtol (argv [2], NULL, 0) machen die Zahl dezimal, also wenn ich 0664 einführe, setzen sie meinen Modus auf 436. Wie kann ich repariere das? –

+0

@EduardoRamos Ich habe das gerade getestet und es funktioniert einwandfrei. Wie überprüfen Sie den Wert? – dbush

Verwandte Themen