Nano Hash - криптовалюты, майнинг, программирование

Как *++argv[0] может ссылаться на разные аргументы командной строки?

Итак, я читал язык программирования C и наткнулся на раздел, где программам теперь разрешено иметь аргументы... Например.

find -x -n pattern

Здесь -x означает кроме. -n означает пронумерованные строки... и pattern это то, что он будет искать в нескольких других строках ввода.

Теперь они рассматривают find как *argv[0], -x и -n как *++argv[0], а pattern как *++argv[0]. Как компьютер отличит один аргумент от другого?

Если все 3 вещи равны *++argv[0], то они остаются равными argv[1], но все они?? Может ли кто-нибудь объяснить подробно?


  • Обратите внимание, что *++argv[0] изменяет значение указателя argv. 01.11.2013
  • Вы должны прочитать, что делает оператор ++. 01.11.2013
  • погуглите что такое argv и argc 01.11.2013
  • ++ - это оператор перед инкрементом. :) Он изменяет значение указателя argv, используя арифметику указателя C. 01.11.2013
  • Ребята, я знаю, что такое argc, argv и операторы post и pre increment/decrement, но в цикле каждый раз, когда вы выполняете ++argv[0], разве вы не получите следующий char/int? т. е. argv[1]... 01.11.2013
  • [0] не увеличивается. 01.11.2013

Ответы:


1
argv[0] = program name = "find"
argv[1] = first argument = "-x"
argv[2] = second argument = "-n"
argv[3] = third argument = "pattern"

argc = 4, поэтому вы знаете, что других аргументов для обработки нет.

Пусть вас не смущает использование оператора предварительного приращения в таких выражениях, как *++argv[0]. Аргументы передаются отдельными элементами массива.

Когда оболочка выполняет вашу команду, она использует пробелы, чтобы разделить командную строку на имя программы и аргументы и передать их вашей программе. Иногда вам нужно обойти это, используя двойные кавычки, например, если вам нужно иметь дело с файлом, имя которого содержит встроенные пробелы:

mv some stupid filename sane_filename  

Это не сработает, потому что "какое-то" "глупое" "имя файла" будет рассматриваться как отдельные аргументы. Но вы можете сделать это:

mv "some stupid filename" sane_filename

чтобы получить один аргумент со встроенными пробелами.

01.11.2013
  • Ох, так что каждый аргумент в основном разделен пробелом..? Спасибо 01.11.2013

  • 2

    Оператор ++n preincrement изменяет переменную, к которой он применяется. При первом выполнении ++argv его индексация 0 фактически указывает на элемент 1 исходного значения argv, во второй раз — на элемент 2 и так далее.

    01.11.2013
  • Как насчет того, что все это ++arv[0]... кроме того, как компьютер отличит один аргумент от другого? Они все на одной строке и не разделены запятыми... 01.11.2013
  • Компьютер не знает. Оболочка сообщает об этом, когда запускает команду. 01.11.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..