Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di sky_451
    Registrato dal
    Apr 2003
    Messaggi
    194

    [C] problema con le stringhe

    Salve a tutti,
    ho fatto questo semplice programma per l'acquisizione di due stringhe, ma non funziona:
    codice:
    #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.
    "There is no dark side of the moon really. Matter of fact it’s all dark."

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    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:
    codice:
    #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.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di sky_451
    Registrato dal
    Apr 2003
    Messaggi
    194
    Grazie mille.
    "There is no dark side of the moon really. Matter of fact it’s all dark."

  4. #4
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936

    Re: [C] problema con le stringhe

    Altrimenti, se vuoi allocarli all'interno della funzione puoi usare questo metodo:

    codice:
    #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'


    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.