Cuando se ejecutan otros proyectos de código abierto, a menudo parece que hay parámetros después de la operación. ¿Cómo se logra esto? ¿Cómo introducirlo en nuestros propios proyectos?
Formas de uso común:
int main(int argc, char* argv[]){
}
int main(int argc, char** argv){
}
int main(int argc, char** argv, char** envp){
}
char** argv
Representa un puntero a un puntero de carácter, que también puede verse como una matriz de punteros a cadenas. En C/C++, los argumentos de la línea de comandos se pasan al programa como cadenas, por lo que char** argv
se utilizan para almacenar argumentos de la línea de comandos.
Aquí hay un programa de muestra que demuestra cómo usar char** argv
para obtener argumentos de línea de comando y generarlos:
#include <iostream>
int main(int argc, char** argv) {
std::cout << "argc = " << argc << std::endl;
for(int i = 0; i < argc; i++) {
std::cout << "argv[" << i << "] = " << argv[i] << std::endl;
}
return 0;
}
Ejecute el programa y pase algunos parámetros, por ejemplo:
./example hello world 123
La salida es la siguiente:
argc = 4
argv[0] = ./example
argv[1] = hello
argv[2] = world
argv[3] = 123
Como puede ver, char** argv
apunta a una matriz de punteros de cadena, cada elemento apunta a una cadena y estas cadenas son parámetros de línea de comando. El programa genera el valor de cada parámetro a su vez recorriendo argv
la matriz.
int main(int argc, char* argv[], char* envp[])
Es la función principal del programa C/C++, contiene tres parámetros:
-
int argc
: Indica el número de parámetros de la línea de comandos, incluido el propio programa. Por ejemplo,./example arg1 arg2
cuando se ejecuta el comando,argc
el valor de 3. -
char* argv[]
: es un puntero a puntero de carácter para almacenar argumentos de línea de comandos.argv[0]
Almacena el nombre del programa,argv[1]
almacena el primer argumento de la línea de comandos, etc. Por ejemplo,./example arg1 arg2
cuando se ejecuta el comando,argv[0]
el valor de es"./example"
, el valor de , es .argv[1]
"arg1"
argv[2]
"arg2"
-
char* envp[]
: es un puntero a puntero de carácter para almacenar variables de entorno. Cada variable de entorno es una cadena con el formatoname=value
. Por ejemplo,envp[0]
lo que se almacena es"USER=john"
,envp[1]
lo que se almacena es"HOME=/home/john"
.
Aquí hay un programa de ejemplo simple que demuestra cómo usar estos tres parámetros:
#include <iostream>
int main(int argc, char* argv[], char* envp[]) {
std::cout << "argc = " << argc << std::endl;
for(int i = 0; i < argc; i++) {
std::cout << "argv[" << i << "] = " << argv[i] << std::endl;
}
for(int i = 0; envp[i] != nullptr; i++) {
std::cout << "envp[" << i << "] = " << envp[i] << std::endl;
}
return 0;
}
El programa puede generar los valores de los argumentos de la línea de comandos y las variables de entorno.