Что означает "argv ['A']" в c? - PullRequest
2 голосов
/ 03 июля 2019

Я нашел следующий код, и я не понимаю, что это такое и как оно работает. Я видел только argv[n] (argv с целочисленным индексом) в C раньше, никогда с таким символом, как 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 ]

4 голосов
/ 03 июля 2019

Технически, это допустимо в C для доступа к элементу argv (argv[65]).

Edit : как отметил Джон Баллинджер в комментариях, это только еслиРеализация C отображает символьные литералы в их значения ASCII, что не требуется стандартом.Тем не менее, большинство реализаций C делают, так что я бы предположил, что автор кода использовал это предположение.

Это потому, что в C все символьные литералы могут действовать как числовые литералы.

Предоставлено,если вы ожидаете более 65 элементов в вашем argv, возможно, что-то не так.И даже в этом случае использование 'A' и 'B' для индексов 65 и 66 не имело бы смысла, если бы у вас не было определенной ассоциации вашего argv с буквами.

TL; DR это индекс, но код невероятно ненормальный и, вероятно, намеренно запутанный

2 голосов
/ 03 июля 2019

'A' - это просто способ указания значения с типом int (который, учитывая, что вы передали буквенно-цифровой символ, должен быть способен вписаться в char на вашей платформе.) Значениеопределяется реализацией, хотя в ASCII это 65.

Так что argv['A'] очень похоже на int n = 'A'; argv[n];

Независимо от того, оснащена ли программа таким количеством аргументов командной строки (argcскажет вам, что if(argc != 100) - недостаточная проверка) - это другое дело.

Все это говорит о том, что из C можно вызвать main из себя;возможно, аргументы командной строки вводятся тогда, как упражнение в запутывании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...