Nippolo ha scritto:
Intendevo che nel caso dinamico l'intestazione diventa (volendo restare nell'ambito di una procedura con un solo argomento):
void fun(char **str)
me lo spieghi, per cortesia, perché non riesco a capire
o meglio, ho capito una cosa: passi un puntatore a puntatore a carattere come per passare un array di stringhe, il primo elemento sarà l'input
il secondo l'output
ho capito giusto?
e se sì, perché? mi sembra inutile complicazione
[EDIT]
Forse ho capito
passi il puntatore(a) al puntatore(b) a carattere
per poter modificare il puntatore(b) e quindi "restituire" una stringa differente, ma indirettamente: cambiando il parametro, non con una return esplicita
ma la mia domanda di tre righe avanti rimane: perchè? non è più facile "restituire" piuttosto che modificare i parametri passati?
[/EDIT]
quindi domanda è: dove sbaglio?
io banalmente, e senza pubblicare codice risolutivo avevo fatto una cosa del genere
int main()
{
char input[] = "ciao, mi chiamo luca e vorrei presentarmi a voi";
char * output = separa(input);
// qui ci sarebbe da fare un controllo sul puntatore restituito....
if(output)
{
printf("%s\n", input);
printf("%s\n", output);
free(output);
return 0;
}
else
{
printf("Errore di allocazione memoria\n");
return 1;
}
}
l'inizio della funzione separa è:
char * separa(char * input)
{
char * output = (char *) calloc(sizeof(char), strlen(input) * 3 / 2) ; // al massimo uno spazio ogni due caratteri
che funziona identica identica (provato) anche se per la prima stringa uso l'allocazione dinamica
int main()
{
char input[] = "ciao, mi chiamo luca e vorrei presentarmi a voi";
char * secondo;
secondo=(char *) calloc(sizeof(char),strlen(input));
strcpy(secondo, input);
char * output = separa(secondo);
// qui ci sarebbe da fare un controllo sul puntatore restituito....
if(output)
{
printf("%s\n", secondo);
printf("%s\n", output);
free(output);
return 0;
}
quindi non vedo quali differenz dovrebbero esserci tra passare un array statico o uno dinamico
dove sbaglio?