【发布时间】:2015-09-06 09:56:13
【问题描述】:
当我这样做时:
int main(int agrc, char argv)
{
printf("%d", argv);
return 0;
}
当我从命令行运行程序时得到这个输入:
$ prog_name 0
0
$ prog_name (from 0-7 characters)
48
$ prog_name 12345678
56
$ prog_name 1234567812345678
64
// and so on...
那么这些值是从哪里来的,为什么它们会增加 8?
当我有这个时会发生什么:
int main(int agrc, char argv[])
?
【问题讨论】:
-
这不是
main的有效签名,因此结果是未定义的行为。 -
运算符不仅仅是为了装饰或者代码看起来更神秘。阅读一本关于 C 编程的书会清楚地回答这个问题。
-
@Olaf 是的,我了解这些操作员的工作,但我不明白为什么我会得到该输出。正如 Oblivious 船长指出的那样,我现在明白这种行为是不可预测的。我以为我会在使用 gcc 时遇到某种错误,但我只收到了警告。
-
@Olaf 了解这些运算符和了解忽略对
main提出的要求的结果是两件不同的事情。 -
@LightnessRacesinOrbit,Capt'n:我撤回了我的评论,因为它没有明确说明这是我的观点。我实际上认为了解指针/数组,并且在 UB 中使用错误的参数类型是至关重要的用 C 编程的知识。这是我告诉我的学生的第一件事。但这就是我,其他导师或资源可能不太重视这些问题。
标签: c++ c command-line-arguments main