0

我正在学习 C。所以我编写了这个距离计时器程序。它与 gnu-gcc 编译器一起运行良好。但是,但是使用 avr 的 gnu-gcc 它确实可以编译,但是当我运行它时,我只得到一个 cmd 会话,除了按任何按钮消失之外什么都不做。我想知道为什么。

我正在使用代码块,这是我的代码

#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;

}
4

1 回答 1

1

您可能gets遇到了自 C99 标准以来已被弃用并在 C11 标准中完全删除的原因:缓冲区溢出很容易。

如果您提供超过四个字符作为输入,那么gets将超出数组的范围,您将有未定义的行为

而是使用fgets以安全的方式读取行。


从功能上return来说。main许多系统(包括所有POSIX 系统,如 macOS 和 Linux)使用 8 位作为返回值。此外,除了零之外的任何东西都被 shell 和调用环境视为失败。

您还应该知道该atoi函数没有重大错误检查。不可能知道您传递的字符串是否包含例如"0"或根本没有任何数字。在这两种情况下,它都会返回0。可以帮助您检测错误的更安全的功能是该strtol功能。

于 2016-08-22T01:18:29.390 回答