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.
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.
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.
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.
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\"\"");
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