我找到了以下代码,但我不知道它是什么或如何工作。我以前只在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");
这是做什么的?您能解释一下它为什么起作用吗?
答案 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
;也许然后引入命令行参数,作为混淆的练习。