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

“是什么意思?”;argv[';A';];在c中?,c,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"); 这有什么用?您能解释一下它为什么工作吗?从技术上讲,这在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");

这有什么用?您能解释一下它为什么工作吗?

从技术上讲,这在C中用于访问argv的元素(
argv[65]
)是有效的

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


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

当然,如果您希望argv中包含65+个元素,则可能有问题。即使如此,除非你的argv与字母有某种特定的关联,否则对索引65和66使用
'A'
'B'
是没有意义的


TL;DR这是一个索引,但代码异常得难以置信,可能是故意混淆的

'A'
只是用
int
类型指定值的一种方式(如果您传递了字母数字字符,则必须能够在平台上嵌入
字符)该值是实现定义的,尽管在ASCII中是65

因此,
argv['A']
很像
intn='A';argv[n]

程序是否配备了那么多的命令行参数(
argc
将告诉您这一点,
如果(argc!=100)
是一个不充分的检查)则是另一回事


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

'A'
是一个数字,请尝试
printf(“%d\n”,'A')
。假设,
'A'
等于整数值
65
。您在哪里读过这段代码?变量看起来像主函数的参数。代码样本是否真的来自main函数?如果这是来自
main
我想看看如何通过命令行提供这两个参数……从技术上讲,访问哪个
argv
元素取决于实现。实现不需要使用ASCII将字符映射到整数,有些则不需要。“所有字符文字都可以充当数字文字”。字符文字的类型仍然是
int
。@Gerhardh。是的,但是很多人忘记了字符是整数类型。所以我只是直截了当地说。