【发布时间】:2016-04-16 00:24:08
【问题描述】:
第一个 sn-p:
#include<stdio.h>
int main(int argc, char **argv)
{
int i;
for(i=1; i<argc; i++)
printf("%s\n", argv[i]);
return 0;
}
加载时间输入:
./a.out devang samir
输出:
德旺
萨米尔
第二次sn-p:
#include<stdio.h>
int main(int argc, int *argv)
{
int i;
for(i=1; i<argc; i++)
printf("%s\n", argv[i]);
return 0;
}
加载时间输入:
./a.out devang samir
输出:
德旺
萨米尔
在这两种情况下,我的输出都是一样的,但是为什么?
- 在第一种情况下,字符串(命令行)如何存储在 char** argv 中?
- 在第二种情况下,字符串(命令行)如何存储在 int * argv...中?
【问题讨论】:
-
第二个程序展示了Undefined Behaviour。任何事情都可能发生(甚至像一个正确的程序一样工作)。
-
这被称为 undefined 行为是有原因的。你有什么理由不只是使用正确的版本,而是射你的脚?
-
那是什么原因? @Olaf
-
虽然我的问题比较修辞,但我不明白你的问题是什么。
-
@Olaf OP 当然应该得到警告。我同意,试图弄清楚为什么未定义的行为有时会达到预期目的并不是一个特别好的利用时间,但这似乎是 OP 帖子的唯一目的。
标签: c pointers command-line-arguments main