Para un programa, me gustaría hacer una matriz copia de los argumentos enviados por línea de comandos mediante malloc().
Así, por ejemplo, si yo hago ./una.uno, dos, tres
Quiero una matriz con {a.fuera, uno, dos, tres} en ella.
Sin embargo, tengo algunos problemas para conseguir mi programa de trabajo. He aquí lo que tengo:
static char** duplicateArgv(int argc, char **argv)
{
char *array;
int j = 0;
//First allocate overall array with each element of char*
array = malloc(sizeof(char*) * argc);
int i;
//For each element allocate the amount of space for the number of chars in each argument
for(i = 1; i < (argc + 1); i++){
array[i] = malloc(strlen(*(argv + i)) * sizeof(char));
int j;
//Cycle through all the chars and copy them in one by one
for(j = 0; j < strlen(*(argv + i)); j++){
array[i][j] = *(argv + i)[j];
}
}
return array;
}
Como se puede imaginar, esto no funciona. Me disculpo de antemano si esto de alguna manera totalmente no tiene sentido, como acabo de empezar a aprender acerca de los punteros. También, no estoy muy seguro de cómo escribir código para liberar cada elemento en la *matriz después de hacer lo que se necesita para la copia.
Alguien podría darme algunos consejos sobre lo que debe buscar en que es hacer lo que quiero?
Gracias por la ayuda!
No eres la asignación o copiar el NULO de terminación caracteres:
Esta línea debe ser cambiado por el valor NULL.
Y el bucle debe ser cambiado a esto:
También, el código puede estar mejor optimizado si usted guarda el resultado de la
strlen()
llame ya llame en tantos lugares.Probar el circuito como este:
char *array;
achar **array;
Es que todavía no funciona?*(argv + i)[j]
. No estaba seguro de si sería analiza como(*(argv + i))[j]
o*((argv + i)[j])
. Y eso hace la diferencia en este caso.primer lugar usted necesita para asignar un vector de tipo char*, no sólo un char*
ahora usted tiene una
array[0..argc]
dechar*
punterosa continuación, para cada uno de los argumentos que usted necesita para asignar espacio para la cadena
Con
de definir un objeto de tipo
char*
. Que es: un objeto cuyo valor puede apuntar a unachar
(y el siguientechar
, …, …)Necesita
Con este nuevo tipo, el valor de
array
puntos a unchar*
, es decir, otro puntero. Usted puede asignar memoria y guardar la dirección de memoria asignada en unchar*
, usted no haría eso con unachar
.