usar resueltos lenguaje leer funciones ejercicios ejemplos como caracteres cadenas cadena arreglo c arrays char parameter-passing cstring

resueltos - funciones de cadenas de caracteres en c++



¿Cómo paso esta matriz de cadenas c correctamente? (3)

Está tratando de pasar una matriz de punteros de charecter a una función para que la declinación de su función sea builtin_cmd(char* argv[]) Aquí hay un ejemplo de muestra para pasar una matriz de punteros a una función

#include <stdio.h> #include <stdlib.h> #include <string.h> void fill_strings(char *str[], int nstrings) { int i; for ( i=0; i < nstrings; i++) strcpy(str[i], "hello world"); } void print_strings(char *str[], int nstrings) { int i; for (i=0; i < nstrings; i++) printf("string %d: %s/n", i, str[i]); } int main(void) { char *index[10]; int i; for(i=0; i<10; i++) { index[i] = malloc(20); } fill_strings(index, 10); print_strings(index, 10); return 0; }

Tengo mi matriz de C-Strings declarada como:

char *argv[MAXARGS];

MAXARGS básicamente solo nos dice cuántas cadenas C hay en la matriz para fines de indexación. Quiero pasarlo a esta función a continuación ...

int builtin_cmd(char **argv)

pero nada parece pasar, llamé a la función de esta manera.

char *argv[MAXARGS]; builtin_cmd(argv);

pero una vez que builtin_cmd en la función builtin_cmd y trato de imprimir usando

printf("%s/n", argv[0]);

no imprime nada ... pero cuando hago esto antes de llamar a la función ...

char *argv[MAXARGS]; printf("%s/n", argv[0]); //builtin_cmd(argv);

imprimirá bien la primera cadena C en la matriz de cadenas c. Mi opinión es que paso la estructura de forma incorrecta y me gustaría saber la forma correcta de pasarla a la función.

EDITAR:

int builtin_cmd(char **argv); int main() { char *argv[128]; //put ''quit'' into argv[0].. printf("%s/n", argv[0]); //prints ''quit'' builtin_cmd(argv); } int builtin_cmd(char **argv) { printf("%s/n", argv[0]); //prints nothing }

El problema es, una vez más, que no puedo parecer argv en la función. También se compila sin errores ni advertencias.


No has mostrado cómo inicializas la matriz, y esa es la parte crucial.

#include <stdio.h> static void builtin_cmd(char **argv) { while (*argv != NULL) printf("%s/n", *argv++); } int main(void) { char *argv[] = { "abc", "def", "ghi", NULL }; builtin_cmd(argv); return 0; }

Este código usa un valor centinela, el puntero nulo, para marcar el final de los datos. La alternativa es pasar el número de cadenas en la matriz como un argumento separado. Cuando utiliza int main(int argc, char **argv) , en realidad tiene ambos mecanismos en uso; argv[argc] == NULL así que está el recuento y luego el valor centinela.


Si está pasando su entrada en la línea de comando, necesita decirle al compilador que está utilizando los parámetros que pasan a main desde el tiempo de ejecución.

int main(int argc, char **argv) {

Eso debería permitirle pasar "quit" como el primer parámetro correctamente. De lo contrario, como dicen los demás, la forma de llenar un "C vector" es importante.