Recuperar argumentos de la línea de comandos en C++
-
Utilice la notación
int main(int argc, char *argv[])
para recuperar argumentos de la línea de comandos en C++ -
Utilice la notación
int main(int argc, char **argv)
para recuperar argumentos de la línea de comandos en C++ -
Utilice el bucle
while
para imprimir argumentos de la línea de comandos en C++
Este artículo explicará varios métodos de cómo recuperar argumentos de la línea de comandos en C++.
Utilice la notación int main(int argc, char *argv[])
para recuperar argumentos de la línea de comandos en C++
Los argumentos de la línea de comandos son valores de cadena que se pueden pasar al programa al inicio de su ejecución. Por lo general, estos argumentos son ampliamente utilizados por los programas que tienen una interfaz exclusiva de CLI, p. Ej. Utilidades de línea de comandos de Unix. Tenga en cuenta que el programa C++ debe tener una definición de función main
especial para acceder a los argumentos de la línea de comandos. Es decir, la función main
debe incluir los parámetros como - (int argc, char *argv[])
. El parámetro argc
representa el recuento total de los argumentos que se pasaron al programa, incluido el nombre del programa en sí. Por otro lado, argv
almacena el array de cadenas de caracteres que denotan los valores de los argumentos, a las que se puede acceder utilizando la notación de array - argv[0]
. Tenga en cuenta que se garantiza que el array de punteros char
terminará en 0
.
El siguiente ejemplo demuestra el uso básico del bucle for
para imprimir cada valor de argumento en la consola. Sin embargo, tenga en cuenta que la declaración if
anterior asegura que el programa tenga argumentos especificados y luego continúa la ejecución.
#include <iostream>
#include <string>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
int main(int argc, char *argv[]) {
if (argc < 2) {
cerr << "No program parameters provided !" << endl;
exit(EXIT_FAILURE);
}
for (int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);
exit(EXIT_SUCCESS);
}
Utilice la notación int main(int argc, char **argv)
para recuperar argumentos de la línea de comandos en C++
Hay otro prototipo de función main
que es válido y se comporta exactamente como el anterior, así que lo incluimos para asegurarnos de que no haya confusión cuando ocurra la siguiente notación: int main(int argc, char **argv)
. Nótese que el acceso a los elementos se realiza de la misma manera, y se pueden recorrer mediante el bucle for
.
#include <iostream>
#include <string>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
int main(int argc, char **argv) {
if (argc < 2) {
cerr << "No program parameters provided !" << endl;
exit(EXIT_FAILURE);
}
for (int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);
exit(EXIT_SUCCESS);
}
Utilice el bucle while
para imprimir argumentos de la línea de comandos en C++
Otro método para acceder a los valores de los argumentos es eliminar la referencia del puntero argv
hasta que sea igual a cero. Tenga en cuenta que se garantiza que el array argv
terminará con un valor cero, que podemos utilizar para implementar un bucle while
para recorrer el array e imprimir los valores de los argumentos uno por uno. Observe que la llamada printf
en la declaración if
a continuación actúa como un informador de errores de que no se pasaron suficientes argumentos al programa. La parte interesante es que el nombre del programa se recupera con la notación argv[0]
y el especificador %s
, lo que lo convierte en un método más flexible que codificar el nombre cada vez que cambia.
#include <iostream>
#include <string>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
int main(int argc, char *argv[]) {
if (argc < 4) {
printf("Usage: ./%s arg1 arg2 arg3\n", argv[0]);
exit(EXIT_FAILURE);
}
while (*argv) {
cout << *argv << endl;
argv += 1;
}
exit(EXIT_SUCCESS);
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook