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

    [C++] Passaggio di matrici da una funzione

    Ciao a tutti!
    Ho un problema: io ho creato una funzione che crea una matrice di tipo char, ad esempio
    codice:
    char miafunzione (char miocarattere)
    { 
    char matrice[3];
    matrice[0]='a';
    matrice[1]=miocarattere;
    matrice[2]='b';
    matrice[3]='\0';
    }
    ora voglio che la funzione restituisca la matrice "matrice", ho provato con "return matrice", però il programma restituische errore, in quanto considera "matrice" una variabile di tipo char, non una matrice.
    Qualcuno sa dirmi come fare?
    Grazie in anticipo!

  2. #2

    Re: [C++] Passaggio di matrici da una funzione

    Originariamente inviato da quit10
    Ciao a tutti!
    Ho un problema: io ho creato una funzione che crea una matrice di tipo char, ad esempio
    codice:
    char miafunzione (char miocarattere)
    { 
    char matrice[3];
    matrice[0]='a';
    matrice[1]=miocarattere;
    matrice[2]='b';
    matrice[3]='\0';
    }
    ora voglio che la funzione restituisca la matrice "matrice", ho provato con "return matrice", però il programma restituische errore, in quanto considera "matrice" una variabile di tipo char, non una matrice.
    Qualcuno sa dirmi come fare?
    Grazie in anticipo!
    • La funzione "char miafunzione (char miocarattere)" e' definita in modo che restituisca un carattere. quindi non puoi restituire un qualcosa che sia diverso da un carattere.
    • Anche se la ridefinisci in modo che ti restituisca una array di caratteri il compilatore non te la compilerebbe perche' in C/C++ le funzioni non possono restituire array.
    • In ogni modo attento che avrai certamente un comportamento indefinito, perche' "sfori" (accedi al 4 elemento di matrice, pur avendone definiti solo 3.

  3. #3
    grazie di avermi risposto, comunque, come faccio a definire la funzione in modo che restituisca una stringa? Che tipo devo usare?

  4. #4
    Originariamente inviato da quit10
    grazie di avermi risposto, comunque, come faccio a definire la funzione in modo che restituisca una stringa? Che tipo devo usare?
    Ci sono diverse possibilità. Prova con std::string
    http://en.wikipedia.org/wiki/String_(C++)

  5. #5
    OK, grazie mille!!

  6. #6
    Potersti modifcare la funzione in modo che renda il puntatore al vettore, ma devi stare attento perchè come hai scritto tu il vettore all'uscita dalla funzione viene dealocato, quindi non è piu raggiungibile fuori dalla funzione in cui è definita...

    potresti fare una cosa del genere...

    codice:
    #include <stdio.h> 
    #include <stdlib.h>
    
    
    char * miafunzione( char ); 
    
    int main () { 
    
    	
    	char * prova = ( char *)  miafunzione('g'); 
    
    	printf("%s", prova); 
    
    	return 0; 
    
    }
    
    
    char * miafunzione (char miocarattere)
    { 
    
    char * matrice = (char *)malloc(4); // 4 perchè metti 4 elementi 
    
    matrice[0]='a';
    matrice[1]=miocarattere;
    matrice[2]='b';
    matrice[3]='\0';
    
    return matrice;
    
    }

  7. #7
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354
    Scusate, mi interessava l'esempio e volevo fare una prova:

    e se usiamo le stinghe? si parla di c++ vero?

    codice:
    #include <iostream>
    
    using namespace std;
    
    string fun(string miocarattere){
      string a = "a" + miocarattere + "b";
      return a;}
    
    
    int main(){
        string a = fun("g");
        cout << a << endl;
        cout << sizeof(a);
        return 0;}
    Che cosa cambia nel fare così?

  8. #8
    Cambia tanto!!!!
    Tu usi un oggetto stringa, che è una cosa completamente diversa rispetto ad char *!!
    Il tuo programma funziona perchè quando tu fai "return a " viene invocato il costruttore di coppia della classe string che crea una coppia dell'oggetto, e come ritorno della funzione rende proprio questa coppia....

    Ma questo avviene perchè è un oggetto del c++, mentre quello che ho postato io è un classico esempio di gestione delle stringhe in c, che non sono altro che array di caratteri e che vanno trattati con le dovute precauzioni!!!

  9. #9
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354
    Non capisco perchè miocarattere non può essere un char (da un errore).

    Ma in termini pratici? non ho sprecato memoria?

  10. #10
    perchè string è un oggetto di tipo stringa, mentre carattere è un oggetto di tipo char ...

    Per poterli usare come vuoi fare tu devi fare un cast...

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.