Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1

    [C] Return di una stringa da una funzione

    Salve a tutti,
    ho una funzione che mi dovrebbe far ritornare una stringa, così definita:

    codice:
    string elementToString(int pos)
    {
         string ritorno;
         strcat(ritorno, '<');
         strcat(ritorno, sp[pos].identifier);
         strcat(ritorno, ',');
         strcat(ritorno, sp[pos].str);
         strcat(ritorno, '>');
         return ritorno
     	//printf("\n<%d, %s>",sp[pos].identifier, sp[pos].str);				
    }
    (dovrebbe solo concatenare quelle variabili, anche se non sono sicuro che la strcat faccia esattamente al caso mio).

    Il punto è che il compilatore mi da come errore:

    codice:
    elementToString declared as a function returning an array
    Che significa? non posso far ritornare un array?
    string non è altro che una define da me creata in questo modo:

    codice:
    typedef char string[COST_NUM_CHAR];
    Vi ringrazio in anticipo per l'aiuto,
    Neptune.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  2. #2
    Tra l'altro mi era sfuggito che il paramentro ".identifier" è un intero, e quindi ho provato a concatenarglielo in questo modo (cosi consigliavano in un'altro thread):

    codice:
    char buffer[100];
         char tmp[20];
    
         sprintf (tmp, "%d", sp[pos].identifier);
         strcpy (buffer, tmp);
         strcpy (buffer, sp[pos].str);;
         printf("%s", buffer);
    Però a quanto pare l'identifier non lo stampa proprio.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  3. #3
    Come hai definito string? Che linguaggio stai usando?
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Originariamente inviato da MItaly
    Come hai definito string? Che linguaggio stai usando?
    Giusto me ne sono dimenticato, il linguaggio è il C, string lo scritto sopra com'è definita.

    Ad ogni modo mi si suggeriva di fare la funzione di tipo "char *" in modo da restituire un puntatore a stringa. Ad ogni modo, ora un grande problema è riuscire a fare quella concatenzione che proprio non mi riesce.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  5. #5
    Ho trovato la funzione itoa per convertire da int a char:

    http://irc.essex.ac.uk/www.iota-six....ntf_sscanf.asp

    Ora ho un'altro dubbio però, se io uso una strcat, e non so quanto saranno grandi le scritte allora creo un terzo vettore (in cui saranno incollate) che avra una grandezza "abbastanza grande" per andare sul sicuro. Poi però, quando lo vado a stampare con un "%s" finisce che mi stampa anche le posizioni "non occupate dal vettore".

    ho provato aggiungendo:
    codice:
    strcat(ritorno,'\0');
    in modo da inserire manualmente il carattere tappo, ma il programma si blocca, sembra andare in loop.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Posta tutto il codice modificato ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Originariamente inviato da oregon
    Posta tutto il codice modificato ...
    Il codice modificato è il seguente:
    codice:
    void elementToString(int pos)
    {
        //conversione da int a stringa
        char simboli[100];
        int cifra,c;
        int i = 0;
    
        char str[10];
        char ritorno[100];
        for(i=0;i<100;i++)
        {
          ritorno[i] = null           
        }
        strcat(ritorno,itoa(sp[pos].identifier, str, 10));
        strcat(ritorno,sp[pos].str);
        
        strcat(ritorno,'\0');
       printf("%s",ritorno);
    Per ora le prove le sto facendo con la funzione void, ed una printf dentro la funzione, ma in realtà, quando riuscirò a farla andare, devo fare in modo che il vetore me lo faccia ritornare con un return.

    Il punto è che sto leggendo che la strcat lo mette di suo il carattere tappo, ma in realtà non è vero perchè senza che scrivo "strcat(ritorno,'\0');" mi stampa anche le posizioni vuote, e se invece lo inserisco il programma me lo compila ma va in loop.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Per restituire una stringa, dovrai allocare dinamicamente la stringa e restituire il puntatore.

    Per il resto, mi spieghi qual è lo scopo del tuo codice ? Quali sono i dati in input e come devono essere inseriti nella stringa ? Magari anche un esempio non guasterebbe ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Originariamente inviato da oregon
    Per restituire una stringa, dovrai allocare dinamicamente la stringa e restituire il puntatore.

    Per il resto, mi spieghi qual è lo scopo del tuo codice ? Quali sono i dati in input e come devono essere inseriti nella stringa ? Magari anche un esempio non guasterebbe ...
    Come posso fare ad allocarli dinamicamente?

    Questa è la struttura dati:

    codice:
    struct StringPool
    	{                                 //Struttura contenente due tipi di dati:         
    		int identifier;               //"identifier":dato di tipo int     
    		string str;                   //"str":dato di tipo string
    	};
    struct StringPool sp[COST_ELEM_MAX];
    Le specifiche richiedono che la funzione in questione abbia in ingresso giusto l'indice dell'elemento da trattare, ed ovviamente la struttura è una variabile globale quindi può accedervi tranquillamente, e restituisca una stringa del tipo:

    codice:
    "<identifier, str>"
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  10. #10
    Sto provando a fare qualcosa del genere:

    codice:
         string strelem;
         int const n = (sp[pos].identifier/10+1) + strlen(sp[pos].str)+4;
         strelem= (string)malloc(n+1 * sizeof(char));
         sprintf(strelem,"<%d,%s>",sp[pos].identifier,sp[pos].str);
    considerando che string è così definito:

    codice:
    typedef char string[COST_NUM_CHAR];
    Però mi da il seguente errore: "cast specifies array type" sulla riga che valorizza strelem.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

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 © 2024 vBulletin Solutions, Inc. All rights reserved.