Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C] restituire una stringa

    ciao,
    ho bisogna di resituire al chiamante un stringa all'interno di una funzione, solo che non so come fare, o meglio non credo si faccia così.
    la funzione che dovrebbe restituire la stringa composta da numeri è del tipo:

    char getNumero(char * nome, char * cognome) {
    int indice;

    if( (indice = getIndice(nome, cognome)) == -1) {
    printf("%s %s non esiste\n",nome, cognome);
    return 0;
    }

    else

    return struttura[indice].stringa[MAX_NUMERO];
    }

    non penso si possa ritornare la stringa in questo modo vero ?

    p.s. le variabile fanno parte di una struttura...
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

  2. #2
    per quel che sappia le stringhe si restituiscono in un vettore allocato dal chiamante

  3. #3
    si ma non credo lo possa ritornare come ho fatto io, perchè per quanto ne so, non si può ritornare l'intera stringa del vettore, ma al max l'indirizzo del suo primo elemento... il problema è se e come questo verrà passato alla funzione chiamante...
    nessuno ha qualke idea o delucidazione ?
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

  4. #4
    Originariamente inviato da rocco.g
    si ma non credo lo possa ritornare come ho fatto io, perchè per quanto ne so, non si può ritornare l'intera stringa del vettore, ma al max l'indirizzo del suo primo elemento... il problema è se e come questo verrà passato alla funzione chiamante...
    nessuno ha qualke idea o delucidazione ?
    in C per far restituire ad una funzione un array,o meglio il puntatore al primo indirizzo(quindi anche una stringa essendo appunto un array di elementi di tipo char) devi usare una funzione di tipo puntatore
    codice:
    char *funzione(char *p){
    
    //qua elabori...insomma fai quello che vuoi
    
    return p; //dove p è il puntatore alla stringa passata in argomento a questa funzione ed eventualmente elaborata/modificata
    }
    nel main invece scrivi,per utilizzare il ritorno della funzione sopra..
    codice:
    int main(){
    char stringa[10];
    
    //...
    char *p1; //puntatore di appoggio per il ritorno
    p1 = funzione(stringa);
    
    // poi se ad es vuoi usare un elemento della stringa ritornata puoi fare cosi'...
    char primo_valore;
    primo_valore =  p1[0]; // mi salvo il primo elemento della stringa ritornata dalla funzione in una var char.
    
    // oppure utilizzi tutta la stringa ritornata normalmente...
    }
    ciaoooooooo
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  5. #5
    grazie per avermi risposto e chiarito le idee.
    Ho risolto un parte il problema, dato che adesso riesco a ritornare la stringa...anke se mi rimanere da eliminare un errore.
    Vi spiego: ho una struttura che gestisce una rubrica, così specificata:

    typedef struct{
    char prenom[MAX_PRENOM];
    char nom[MAX_NOM];
    char tel[MAX_NUMERO];
    } Personne;

    poi c'è all'interno del prog, una funziona che permette di ricercare un numero appartenente alla persona, che risulta del tipo:

    if((numTel = getNumero(pers.nom, pers.prenom))!=0)
    printf("Le numero de telephone de %s %s est: %s\n",
    pers.prenom, pers.nom, numTel);
    else
    printf("%s %s n'a pas de numero enregistre\n",pers.prenom, pers.nom);
    break;

    la funzione "incriminata" getnumero è :

    char *getNumero(char * nom, char * prenom) {

    int indice;

    if( (indice = getIndicePersonne(nom, prenom)) == -1) {
    printf("%s %s n'est pas dans le repertoire\n",prenom, nom);
    return 0;
    }

    else
    {

    char *ptr;
    mia = &repertoire[indice].tel[MAX_NUMERO];


    return ptr;

    }

    }

    credo ke c sia un errore in quest'ultima, dato che quando avvio il prog ed uso questa specifica funzione, al posto del numero della persona, mi viene stampato il nome della persone stessa...

    sbaglio qualcosa ?

    ah repertoire è inizializzato così:

    static Personne repertoire[MAX_REP]; ( non credo cmq che serva )...
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

  6. #6
    ehm ragazzi ho risolto da solo...grazie comunque :-)
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

  7. #7

    .........

    anche se hai risolto il problema, dovresti fare un bel ripasso di C, perchè:
    - dichiari una funzione che ritorna il puntatore ad una stringa, e
    poi gli fai all'interno di una istruzione if-else fai ritornare
    kome valore un intero....

    Sono sconcertato
    DD

  8. #8
    non me ne ero nemmeno accorto a dire la verità :-)
    in effetti mi sembra un errore piuttosto grosso ! mi sembra strano che l'abbia fatto... come scusante posso solo dire che l'ho fatto per fretta dato che non ho fatto copia/incolla...
    cmq tranquillo, uso il C da poco tempo...nemmeno un mese ..., e quindi più che ripeterlo lo sto ancora imparando...
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

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.