2016-08-22 3 views
0

Ich lerne C. Also schrieb ich diese Entfernung Timer-Programm. Es läuft gut mit gnu-gcc-Compiler. Aber mit gnu-gcc für avr kompiliert es sich aber wenn ich es ausführe bekomme ich nur eine cmd Sitzung, die nichts anderes macht als verschwinden sobald ich einen beliebigen Knopf drücke. Ich möchte wissen, warum.Mein Programm läuft gut auf gnu-gcc, aber nicht auf gnu gcc für avr

I Codeblocks verwenden und hier ist mein Code

#include<stdio.h> 
#include<stdlib.h> 
#define speedpersecond 5 

int main() 

{ 

char time [5]; 

double distance; 

printf("Please enter time in seconds"); 

gets(time); 

distance = atoi(time) * speedpersecond; 

printf("Distance is %g ", distance); 

return 8585; 

} 
+2

Verwenden Sie nicht 'gets'. Und warum gibst du '8585' zurück? Versuchen Sie, 0 – stackptr

+0

zurückgeben Nie gedacht, dass es einen Unterschied machen würde, nur eine beliebige Zahl zurückgeben wird tun. –

+1

Mmh ... wo führst du das Programm aus, das du mit gcc-avr kompiliert hast? Auf Ihrem PC oder auf dem Mikrocontroller? – deamentiaemundi

Antwort

1

Sie sind wahrscheinlich in den Grund laufen gets seit dem C99-Standard veraltet, und vollständig in dem C11-Standard entfernt: Pufferüberläufe sind viel zu einfach.

Wenn Sie mehr als vier Zeichen als Eingabe eingeben, schreibt gets außerhalb der Grenzen des Arrays und Sie haben undefined Verhalten.

Verwenden Sie stattdessen fgets, um Leitungen auf sichere Weise zu lesen.


Und in Bezug auf die return von der main Funktion. Viele Systeme (einschließlich alle POSIX-Systeme, wie MacOS und Linux) verwenden acht Bits für den Rückgabewert. Auch alles andere als null wird von Shells und Calling-Umgebungen als Fehler angesehen.

Sie sollten auch wissen, dass die atoi Funktion keine größere Fehlerprüfung hat. Es ist unmöglich zu wissen, ob die übergebene Zeichenfolge z.B. "0" oder keine Ziffern haben. In beiden Fällen wird 0 zurückgegeben. Eine sicherere Funktion, die Ihnen hilft, Fehler zu erkennen, ist die strtol Funktion.

+0

Ok und das strtol Funktion ist es genauso wie Atoi verwendet? –

+0

Kannst du mir ein Beispiel geben? –

+0

@AllanMayers Folgen Sie dem Link, es führt zu einer Referenz, die ein Beispiel haben. –

Verwandte Themen