【发布时间】:2015-12-03 12:33:21
【问题描述】:
我有这个示例代码:
#include <stdio.h>
#include <stdlib.h>
int addOne();
int main(int argc, char** argv) {
char s[100];
int x = 1;
x = addOne(x);
printf("%d",x);
gets(s);
return (EXIT_SUCCESS);
}
int addOne(int j) {
return j + 1;
}
您可以看到 printf 在gets(s)之前,但是当我运行代码时,它首先询问字符串,然后打印数字。我正在使用带有 Cygwin gcc 编译器的 NetBeans。有什么我想念的吗?是编译器错误吗?
【问题讨论】:
-
如果您运行它并输入超过 99 个字符的字符串,您错过了关于未定义行为的部分。
-
这一行:
int addOne();不正确,应该是:int addOne( int ); -
函数:
gets()已被贬值,并在最新标准中被完全删除。建议使用fgets() -
发布的代码无法干净地编译。编译时,始终启用所有警告,然后修复这些警告。 (对于 gcc,至少使用:
-Wall -Wextra -pedantic)例如,编译器会发出警告: 1)未使用的参数argc2)未使用的参数argv[]3)不要使用已弃用的函数gets()