PDA

Visualizza la versione completa : [C] problema con le stringhe


sky_451
25-01-2005, 13:07
Salve a tutti,
ho fatto questo semplice programma per l'acquisizione di due stringhe, ma non funziona:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void inserimento_nomi (char *nome1, char *nome2);

main()
{
char *nome1, *nome2;

inserimento_nomi (nome1, nome2);

printf("\nnome1: %s\n", nome1);
printf("\nnome2: %s\n", nome2);

return 0;
}

void inserimento_nomi (char *nome1, char *nome2)
{
/* alloco memoria per le due stringhe (max. 19 caratteri) */
nome1 = (char *) malloc (sizeof(char) * 20);
nome2 = (char *) malloc (sizeof(char) * 20);

printf("\n\n\tInserire il nome1: ");
fflush(stdin);
gets(nome1);
system("cls");
printf("\n\n\tInserire il nome2: ");
fflush(stdin);
gets(nome2);
}

Non riesco proprio a capire dove sbaglio. :master:
Facendo delle printf di prova all'interno di inserimento_nomi tutto va bene. Il problema il risultato che ottengo al di fuori della funzione: le printf mi mandano in crash il programma.
Grazie per l'aiuto.

LeleFT
25-01-2005, 13:28
Prima di poter passare i puntatori alla funzione, devi allocarli: non puoi prima passarli alla funzione e poi allocarli, altrimenti passi alla funzione un valore di memoria non valido:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void inserimento_nomi (char *nome1, char *nome2);

main()
{
char *nome1, *nome2;

/* alloco memoria per le due stringhe (max. 19 caratteri) */
nome1 = (char *) malloc (sizeof(char) * 20);
nome2 = (char *) malloc (sizeof(char) * 20);

inserimento_nomi (nome1, nome2);

printf("\nnome1: %s\n", nome1);
printf("\nnome2: %s\n", nome2);

return 0;
}

void inserimento_nomi (char *nome1, char *nome2)
{
printf("\n\n\tInserire il nome1: ");
fflush(stdin);
gets(nome1);
system("cls");
printf("\n\n\tInserire il nome2: ");
fflush(stdin);
gets(nome2);
}

Ciao. :ciauz:

sky_451
25-01-2005, 13:30
Grazie mille.
:ciauz:

/dev/null
25-01-2005, 16:39
Altrimenti, se vuoi allocarli all'interno della funzione puoi usare questo metodo:



#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void inserimento_nomi (char *nome1, char *nome2);

main()
{
char *nome1, *nome2;

inserimento_nomi (&nome1, &nome2);

printf("\nnome1: %s\n", nome1);
printf("\nnome2: %s\n", nome2);

return 0;
}

void inserimento_nomi (char **nome1, char **nome2)
{
/* alloco memoria per le due stringhe (max. 19 caratteri) */
*nome1 = (char *) malloc (sizeof(char) * 20);
*nome2 = (char *) malloc (sizeof(char) * 20);

printf("\n\n\tInserire il nome1: ");
fflush(stdin);
gets(*nome1);
system("cls");
printf("\n\n\tInserire il nome2: ");
fflush(stdin);
gets(*nome2);
}


In questo caso comunque non penso sia il metodo piu' consigliato, perche' dovresti deallocare le stringhe nella funzione main() e quindi, imho, e' meglio anche allocarle li' dentro...
A proposito di questo: Ricordati sempre di deallocare la memoria allocata quando non ti serve piu' :)


:ciauz:

Loading