Le funzioni restituiscono stringhe?

di il
8 risposte

Le funzioni restituiscono stringhe?

Ciao a tutti: sono nuovo del forum.

Una domanda, forse banale per i più: e' vero che le funzioni in C non restituiscono stringhe?
Sto cercando di creare un programma che genera il codice fiscale e sto avendo non pochi problemi nel creare il file sorgente!

Grazie in anticipo,
Gabriele.

8 Risposte

  • Re: Le funzioni restituiscono stringhe?

    Si che possono!
    Anche se genericamente viene passato il vettore a char alla funzione insieme alla sua dimensione.
    La funzione lavorerà poi su questo vettore.
  • Re: Le funzioni restituiscono stringhe?

    Quindi, passando alla funzione il mio cognome come parametro (qualcosa come char cognome[])e la lunghezza del cognome stesso (int dim) dovrebbe restituirmi una stringa di 3 lettere corrispondente alla codice fiscale corrispondente al cognome? O è meglio usare una void?
  • Re: Le funzioni restituiscono stringhe?

    
    void ciao( char v[] )
    {
        strcpy(v,"ciao mondo");
    }
    
    int main()
    {
        char vettore[80];
        ciao(vettore);
        printf("%s\n",vettore);
    }
    
    
    Questo è quello che generalmente si fa.
  • Re: Le funzioni restituiscono stringhe?

    Quindi meglio usare il void ciao

    che non qualcosa tipo char ciao(){
    char v[50]
    strcpy(v,"ciao mondo");
    return v;
    }

    giusto?
  • Re: Le funzioni restituiscono stringhe?

    No così non puoi, in quel modo il vertore v verrà eliminato appena termina la funzione.
    Hai due soluzioni, o crei un vettore dinamico tramite la malloc() o lo crei come static com tutte le problematiche che ne derivano:
    
    char* ciao1()
    {
        char* v = malloc(80);
        strcpy(v,"ciao mondo");
        return v;
    }
    
    char* ciao2()
    {
        static char v[80];
        strcpy(v,"ciao mondo");
        return v;
    }
    
    int main()
    {
        char* v = ciao1();
        printf("%s\n",v);
        free(v);
    
        v = ciao2();
        printf("%s\n",v);
    
        return 0;
    }
    
    
    Ripeto che se non per particolari esigenze è da preferire la prima soluzione, quella con void o in alternativa int in modo da ritornare un errore se necessario.
  • Re: Le funzioni restituiscono stringhe?

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

    int isvocal(char a){
    return (a=='A'||a=='E'||a=='I'||a=='O'||a=='U'||
    a=='a'||a=='e'||a=='i'||a=='o'||a=='u')?1:0;
    }

    int isconsonant(char a){
    return ((isvocal(a)==0)&&(('a'<a<'z')||('A'<a<'Z')))?1:0;
    }

    void cod_cognome(char a[], int dim, char b[]){
    int i;
    int j=0;
    int cont=0;
    while(cont<3){
    for (i=0;i<dim;i++){
    if(isconsonant(a)==1){
    b[j]=a;
    j++;
    cont++;
    }
    }
    }
    while(cont<3){
    for (i=0;i<dim;i++){
    if(isvocal(a)==1){
    b[j]=a;
    j++;
    cont++;
    }
    }
    }
    while(cont<3){
    strcat(b,'x');

    cont++;
    }

    }

    main(){
    char cognome[3]={'g','a','b','r','i','e','l','e'};

    char codicecognome[3];
    cod_cognome(cognome,9,codicecognome);
    puts(codicecognome);
    system("PAUSE");
    return 0;
    }

    al momento di mandare in esecuzione mi compare la scritta gb e non gbr.
    boh.
  • Re: Le funzioni restituiscono stringhe?

    GabrieleFortunato ha scritto:


    char cognome[3]={'g','a','b','r','i','e','l','e'};
    Apparte questo, usa i tag code per inserire codice nel forum..
  • Re: Le funzioni restituiscono stringhe?

    Ci sono un po' di errori, sintattici e logici ...

    Intanto queste linee

    char cognome[3]={'g','a','b','r','i','e','l','e'};
    return ((isvocal(a)==0)&&(('a'<a<'z')||('A'<a<'Z')))?1:0;
    strcat(b,'x');

    che devono essere rispettivamente

    char cognome[] = "gabriele";
    return ((isvocal(a)==0)&&((a>='a' || a<='z')||(a>='A' || a<='Z')))?1:0;
    strcat(b,"x");

    tutta roba che il compilatore dovrebbe già indicarti in fase di compilazione ...

    e poi devi correggere l'algoritmo della funzione

    cod_cognome
Devi accedere o registrarti per scrivere nel forum
8 risposte