Beunruhigend Umwandlung string zu long long in C
Ich habe Probleme dabei, den atoll-Funktion richtig eingestellt eine lange long-Wert in c ist. Hier ist mein Beispiel:
#include <stdio.h>
int main(void) {
char s[30] = { "115" };
long long t = atoll(s);
printf("Value is: %lld\n", t);
return 0;
}
Diese Drucke:
Wert: 0
Dieser funktioniert aber:
printf("Value is: %lld\n", atoll(s));
Was ist hier Los?
- ideone.com/WntSUK Versucht auf beiden IDEOne und mein Rechner keine Probleme? Ist das der gesamte code?
- das gleiche gilt für mich. gut funktionierte.
- Welchen compiler, welche version, gibt es irgendwelche Warnungen (
-Wall
im GCC). - Sie fehlt
#include <stdlib.h>
so das Ergebnisatoll
abgeschnitten werden kann. - Dank Paul R! Dass das problem behoben.
- können Sie bitte erklären, das ist eher interessant?
- ohne ein Prototyp, C Verzug der Rückgabe-Typ
int
(und Probleme eine compiler-Warnung, die Sie wirklich achten sollten, wenn Sie richtig konfiguriert compile-source-Anweisung in Ihrem Makefile), die auf diesem system ist wahrscheinlich kleiner alslong long
(in der Tat habe ich alle, aber garantieren, es). - richtig.... Danke!
- Sehen meyumar Antwort unten für die Warnung generiert, wenn die Warnungen sind korrekt konfiguriert-build-Prozess.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lassen Sie uns zunächst die Antwort auf Ihre Frage:
, Dann lassen Sie uns diskutieren und beantworten 'warum?':
Für die Kompatibilität mit sehr alten C-Programmen (vor C89), eine Funktion verwenden, die zimmerreserviereung, ohne das Sie erklärt die ersten, die es generiert nur eine Warnung, von GCC, nicht ein Fehler (Wie bereits von den ersten Kommentar hier, auch implizite Deklarationen sind nicht erlaubt, C89, also einen Fehler zu erzeugen, wäre nicht angemessen, das ist ein weiterer Grund, warum nur eine Warnung erzeugt wird). Aber der Rückgabetyp einer solchen Funktion wird davon ausgegangen, dass
int
(nicht die angegebene Art instdlib.h
füratoll
zum Beispiel), weshalb das Programm ausgeführt wird unerwartet beendet, aber nicht ein Fehler generiert. Wenn Sie kompilieren mit-Wall
Sie werden sehen, dass:Diese Tatsache meist Schocks Menschen, wenn Sie verwenden
atof
ohnestdlib.h
, in welchem Fall die erwartetedouble
Wert wird nicht zurückgegeben.HINWEIS: (Als Antwort auf einen der Kommentare, die Frage) Dies ist der Grund, warum die Ergebnisse der
atoll
könnte gekürzt werden, wenn der richtige header ist nicht im Lieferumfang enthalten.