¿Cómo leer “cadena” del argumento de la línea de comandos en C?

Tengo una pregunta acerca de pasar parámetros a través de la línea de comando.

Mi main() parece a

 int main(int argc, char **argv){ int b, d, n, flag; char *init_d, tst_dir[100]; argv++; init_d=*(argv++); //printf(); <--------What do I have to do to init_d so that I can print it later? 

Si argv es un puntero a una matriz de punteros, estoy asignando init_d para que apunte al valor al que apunta el puntero a que apunta argv ? (Si eso tiene sentido)

Asumo que tengo que incluir ese valor en una matriz de caracteres para poder imprimirlo, pero si no sé el tamaño de la “cadena” que estoy transmitiendo, no estoy seguro de cómo lograrlo. Por ejemplo, si ejecuto mi código ‘./myprogram hello’ comparado con ‘./myprogram alongerinput’

Puede imprimir los argumentos sin transferirlos a matrices de caracteres. Son cuerdas C terminadas en nulo y printf come para el desayuno:

 for (i=0; i 

Aquí hay un ejemplo que convierte los argumentos de la línea de comandos en una sola cadena:

 #include  #include  #include  int main(int argc, char *argv[]) { if (argc < 1) return 0; int i; int strsize = 0; for (i=1; i i+1) strsize++; } printf("strsize: %d\n", strsize); char *cmdstring; cmdstring = malloc(strsize); cmdstring[0] = '\0'; for (i=1; i i+1) strcat(cmdstring, " "); } printf("cmdstring: %s\n", cmdstring); return 0; } 

argv es un puntero a una matriz de cadenas terminadas en nulo. No es necesario saber el tamaño de la cadena; todo lo que necesita hacer es señalar el valor, ya que el final de la cadena se indica con un ‘\ 0’.

 char* init_d = argv[0]; printf("%s", init_d); 

Si quieres saber la longitud de la cadena, puedes usar strlen(argv[0]) .

despues de correr

 init_d = *(argv++); 

(Parens no es necesario, por cierto), init_d es un puntero a un carácter. En C, una cadena es un puntero de carácter que se adhiere al contrato y si se avanza lo suficiente, finalmente se alcanzará un carácter nulo (‘\ 0’), lo que significa el final de la cadena. En otras palabras, init_d ahora es precisamente la cadena que desea. Puedes imprimirlo con

 printf("%s", init_d); 

Tenga en cuenta, por cierto, que * argv ++ le está dando el primer elemento de argv, que en realidad es el nombre de la función en la línea de comandos. Probablemente desee el primer argumento de línea de comando, que obtendrá con * ++ argv.

 int main(int argc, char **argv){ while(--argc>0) printf("%s\n",*++argv); return 0; } argc: argument count ie number of arguments in command line argv: argument vector 

si su progtwig es myProg entonces myProg hello en la línea de comando tiene argc = 2 (incluido el nombre del progtwig), argv [0] es “myProg” y argv [1] es “hola”

Puede mostrar la cadena a la que apunta con init_d con

 printf("%s", init_d); 

“% s” muestra todos los caracteres de la cadena hasta que llega a ‘\ 0’. En C, las cadenas terminan en nulo.