При вызове внешних приложений через system() в C крайне важно обеспечить правильную обработку аргументов, которые содержать пробелы. Если и путь к исполняемому файлу, и аргумент содержат пробелы, может возникнуть ошибка.
system() по сути выполняет указанную команду с помощью cmd /C. При обработке командной строки cmd следует определенным правилам в отношении символов кавычек. По умолчанию удаляются начальные и конечные кавычки, а оставшаяся строка рассматривается как имя исполняемого файла.
Чтобы решить эту проблему, команду необходимо заключить в дополнительный набор двойные кавычки:
system("\"\""CMD\"" \""ARG1\"" \""ARG2\"\"");
Это дополнительное Уровень кавычек гарантирует, что cmd правильно интерпретирует каждый аргумент, независимо от наличия пробелов.
Альтернативный подход предполагает использование командного файла для выполнения команды с нужными аргументами. пакетный файл может быть создан со следующим содержимым:
cd PATH_TO_DIR EXECUTABLE_NAME ARG1 ARG2
При вызове system() с этим именем пакетного файла в качестве аргумента команда будет выполнена должным образом, даже если аргументы содержат пробелы.
Чтобы обеспечить совместимость с различными средами и реализациями оболочки, рекомендуется включать ключ /S при использовании system(). Этот переключатель заставляет cmd анализировать командную строку строго на основе случая 2, как описано в документации cmd.
Пример:
system("cmd /S /C \"\""CMD\"" \""ARG1\"" \""ARG2\"\"");
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3