为什么会导致细分错误,
int main(char *argv[])
{
printf("%s\n", argv[0]);
return 0;
}
为什么不这样做
int main(int argc, char *argv[]) {
int i = 0;
printf("\ncmdline args count=%d", argc);
/* First argument is executable name only */
printf("\nexe name=%s", argv[0]);
for (i = 1; i < argc; i++) {
printf("\narg%d=%s", i, argv[i]);
}
printf("\n");
return 0;
}
我没有区别。但是从C编程的角度来看,我是一个完全的菜鸟。
答案 0 :(得分:4)
第一个程序的main
原型无效:int main(char *argv[])
。
这具有未定义的行为,在您的情况下是崩溃。
第二个程序正确并且可以按预期执行。
答案 1 :(得分:3)
第一个假定没有有效的实现定义的行为,第一个具有不受支持的main()
定义。
根据C11标准:
5.1.2.2.1程序启动
在程序启动时调用的函数名为main。实现没有为此声明任何原型 功能。它的返回类型应为int和 没有参数:
int main(void) { /* ... */ }
或带有两个参数(此处称为argc和argv,尽管可以使用任何名称,因为它们是该函数中的局部变量 声明):
int main(int argc, char *argv[]) { /* ... */ }
或同等学历;或其他实现方式定义的方式。