Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Cranfi
    Registrato dal
    Feb 2011
    Messaggi
    22

    [C] Funzione che ritorna stringa

    Ciao a tutti, ho una domandina..
    qual'è la sintassi per ritornare al main() una stringa elaborata da una funzione?Devo scriver return "????";
    Vi posto il codice..
    Grazie!
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAXNUM 100
    
    int funzione(char *stringa_dove_cercare, char *stringa_da_cercare);
    
    int main()
    {
       char v[MAXNUM], w[MAXNUM];
    
       printf("Introduci la stringa: ");
       gets(v);
       printf("Introduci la stringa: ");
       gets(w);
    
       printf("risultato %c \n", funzione(v,w));
    
       return EXIT_SUCCESS;
    }
    
    /*--------------------------------------------------------*/
    int funzione(char *a, char *x)
    {
       int i,lx;
       char esito[MAXNUM];
       lx=strlen(x);
       for (i=0;i<lx-1;i++)
       {
          esito[i]=x[i];
          esito[i+1]=a[i];
       }
    
       return ???????;
    }
    Cri

  2. #2
    la funzione deve essere definita come char*
    e ovviamente il return deve restituire una variabile di tipo char*

    in tal caso la tua printf dovrebbe avere un %s, non un %c

    in ogni caso la funzione che hai creato non ha molto senso
    principalmente perchè la parte che copi da "a" non verrà mai salvata, visto che all'iterazione successiva sarà occupata da quella di "x"
    in secondo luogo perchè, se vuoi che la printf %s non ti dia errori, devi aggiungere il carattere di terminazione stringa.

  3. #3
    Celebron ha ragione, per prima cosa l'interfaccia della funzione deve essere:

    char* funzione(char *stringa_dove_cercare, char *stringa_da_cercare);


    Poi c'è una questione da considerare, se nella tua funzione tu fai:

    codice:
    char esito[MAXNUM];
    
    /*codice della funzione*/
    
    return esito;
    il compilatore dovrebbe darti un warning del tipo: "function 'funzione' return a local variable", che ti indica che tu ritorni come risultato della funzione una stringa variabile locale di 'funzione' e che quindi, terminata questa funzione, cesserà di esistere!
    Per far si che "continui ad esistere" dopo che 'funzione' è terminata e che quindi possa essere correttamente ritornata occorre allocare dinamicamente, facendo:

    codice:
    char* esito;
    esito = (char*) malloc (MAXNUM*sizeof(char));
    /*codice della funzione*/
    return esito;
    Nel main però è fondamentale, prima di terminare il programma, liberare la memoria allocata con la free(). Quindi ti conviene fare tipo:

    codice:
    char* result;
    result = funzione (v, w);
    
    /*usi result come ti serve*/
    
    free (result);
    return 0;
    Detto ciò, come evidenziato da Celebron, la tua funzione non funziona ( ) molto, ma è un altro paio di maniche!
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  4. #4
    Utente di HTML.it L'avatar di Cranfi
    Registrato dal
    Feb 2011
    Messaggi
    22
    Grazie dei consigli..ma in che senso "a"non viene salvata?La passo come valore e la gestisco come argomento..giusto?!?
    Lo scopo è creare una funzione che che prese due stringhe le faccia visualizzare in modo alternato, esempio: pippo + PLUTO --> p P i L p U p T o O.
    Cri

  5. #5
    Originariamente inviato da Cranfi
    Grazie dei consigli..ma in che senso "a"non viene salvata?La passo come valore e la gestisco come argomento..giusto?!?
    Lo scopo è creare una funzione che che prese due stringhe le faccia visualizzare in modo alternato, esempio: pippo + PLUTO --> p P i L p U p T o O.

    Il problema, parecchio incasinato, sta in questo ciclo:

    codice:
    for (i=0;i<lx-1;i++)
       {
          esito[i]=x[i];
          esito[i+1]=a[i];
       }
    Partiamo anche solo dalla prima iterazione: i vale 0, nella prima cella di esito (esito[0]) salvi la parte che t'interessa di x, poi nella seconda cella di esito (esito[0+1= 1]) salvi la parte che t'interessa di a; finito il ciclo, i viene incrementato e ora vale 1. Alla seconda iterazione, la prima istruzione fa si che tu salvi la parte che t'interessa di x in esito[1], dove prima avevi scritto la parte di a, andando quindi a sovrascrivere! Puoi immaginare che la cosa si ripeta ad ogni ciclo!
    Inoltre, se ho capito bene tu assumi per ipotesi che le due stringhe passate abbiano la stessa dimensione no? Detto ciò ti conviene fare tipo:

    codice:
    int dim = strlen(x) * 2 + 1; /*il doppio della dimensione di una stringa più lo spazio per il terminatore*/
    char* esito;
    int i = 0, j = 0;
    
    esito = (char*) malloc (dim*sizeof(char));
    
    for (i = 0; i < dim; i++)
    {
               esito[i] = x[j];
               esito[++i] = a[j];
               j++;
    }
    esito[i] = '\0'; /*inserisci il terminatore*/
    
    return esito;
    Così dovrebbe funzionare
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

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.