"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo ejecutar aplicaciones externas con argumentos que contienen espacios utilizando el sistema C++()?

¿Cómo ejecutar aplicaciones externas con argumentos que contienen espacios utilizando el sistema C++()?

Publicado el 2024-11-08
Navegar:502

How to Execute External Applications with Arguments Containing Spaces Using C   system()?

La invocación de C system() falla con múltiples argumentos que contienen espacios

Al invocar aplicaciones externas a través de system() en C, es crucial garantizar el manejo adecuado de los argumentos que contener espacios. Si tanto la ruta ejecutable como un argumento contienen espacios, puede surgir un error.

Mecanismo de error subyacente

system() esencialmente ejecuta el comando especificado usando cmd /C. Al procesar la línea de comando, cmd sigue ciertas reglas con respecto a las comillas. De forma predeterminada, elimina las comillas iniciales y finales y trata la cadena restante como un nombre ejecutable.

Resolviendo el error

Para resolver este problema, el comando debe estar incluido en un conjunto adicional de comillas dobles:

system("\"\""CMD\"" \""ARG1\"" \""ARG2\"\"");

Este extra El nivel de comillas garantiza que cmd interprete cada argumento correctamente, independientemente de la presencia de espacios.

Enfoque alternativo

Un enfoque alternativo implica el uso de un archivo por lotes para ejecutar el comando con los argumentos deseados. El archivo por lotes se puede crear con el siguiente contenido:

cd PATH_TO_DIR
EXECUTABLE_NAME ARG1 ARG2

Al llamar a system() con este nombre de archivo por lotes como argumento, el comando se ejecutará según lo previsto, incluso con argumentos que contengan espacios.

Consideraciones adicionales

Para garantizar la compatibilidad con diferentes entornos e implementaciones de shell, se recomienda incluir el modificador /S cuando se utiliza system(). Este modificador obliga a cmd a analizar la línea de comando estrictamente basándose en el caso 2, como se describe en la documentación de cmd.

Ejemplo:

system("cmd /S /C \"\""CMD\"" \""ARG1\"" \""ARG2\"\"");
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3