2016-08-22 11 views
0

Я учу C. Поэтому я написал эту программу таймера дистанции. Он хорошо работает с компилятором gnu-gcc. Но но с gnu-gcc для avr он компилируется, но когда я его запускаю, я получаю только сеанс cmd, который ничего не делает, кроме как исчезает, как только я нажимаю любую кнопку. Я хочу знать почему.Моя программа хорошо работает на gnu-gcc, но не на gnu gcc для avr

Я использую блоки кода, и вот мой код

#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

Не используйте 'gets'. И почему вы возвращаете '8585'? Попробуйте вернуться 0 – stackptr

+0

Никогда не думал, что это будет иметь какое-то значение, просто верните любое число. –

+1

Mmh ... где вы запускаете программу, которую вы скомпилировали с помощью gcc-avr? На вашем ПК или на микроконтроллере? – deamentiaemundi

ответ

1

Вы, вероятно, работаете в причину gets устарел, так как стандарт C99 и полностью удален в стандарте C11: Переполнение буфера является способом легко.

Если вы указали более четырех символов в качестве входных данных, тогда gets будет выписывать границы массива, и у вас будет неопределенное поведение.

Вместо этого используйте fgets, чтобы читать строки безопасным способом.


И о том, что return от функции main. Многие системы (включая все POSIX-системы, такие как macOS и Linux) используют восемь бит для возвращаемого значения. Кроме того, все, кроме нуля, считается сбоем оболочек и вызывающих сред.

Вы также должны знать, что функция atoi не имеет большой проверки ошибок. Невозможно узнать, содержит ли строка, которую вы передаете, например. "0" или вообще нет цифр. В обоих случаях он вернет 0. Более безопасная функция, которая поможет вам обнаружить ошибки, - это функция strtol.

+0

Хорошо, и эта функция strtol используется так же, как atoi? –

+0

Можете ли вы привести мне пример? –

+0

@AllanMayers Следуйте по ссылке, это приводит к ссылке, которая имеет пример. –

 Смежные вопросы

  • Нет связанных вопросов^_^