c中的“ argv ['A']”是什么意思?

时间:2019-07-03 13:25:25

标签: c

我找到了以下代码,但我不知道它是什么或如何工作。我以前只在C中看过argv[n](带有整数索引的argv),从来没有像argv['A']这样的字符文字。

if(argc != 100) return 0;
if(strcmp(argv['A'],"\x00")) return 0;
if(strcmp(argv['B'],"\x20\x0a\x0d")) return 0;
printf("Stage 1 clear!\n");

这是做什么的?您能解释一下它为什么起作用吗?

2 个答案:

答案 0 :(得分:4)

从技术上讲,这在C语言中对于访问argv('A')的元素有效。

编辑:正如John Ballinger在评论中指出的那样,仅当您的C实现将字符文字映射到其ASCII值时,这不是标准所必需的。但是,大多数C实现都这样做,所以我假设代码的作者正在使用这种假设。

这是因为在C语言中,所有字符文字都可以充当数字文字。

当然,如果您期望argv中有65个以上的元素,则可能是错误的。即便如此,除非您将argv与字母进行某种特定的关联,否则将'B'和{{1}}用于索引65和66毫无意义。

TL; DR 它是一个索引,但是代码异常异常,并且可能被故意混淆了

答案 1 :(得分:2)

'A'只是用int类型指定值的一种方法(鉴于您已经传递了字母数字字符,因此必须能够将char插入您的平台。)该值是实现定义的,尽管在ASCII中为65。

所以argv['A']就像int n = 'A'; argv[n];

程序是否配备了许多命令行参数(argc会告诉您,而if(argc != 100)则是不充分的检查)是另一回事。

总而言之,可以在C中从自身调用main;也许然后引入命令行参数,作为混淆的练习。