Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - return di un array
Forum - C/C++ - return di un array

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
vale77777 (Normal User)
Newbie


Messaggi: 15
Iscritto: 08/10/2018

Segnala al moderatore
Postato alle 14:07
Martedì, 16/10/2018
Salve, ho scritto questo programmino:
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
char *a()
{
    struct b
     { char g[10];
        int mese;
     };
     b c;
     c.mese=46;
    strcpy(c.g, "anni");

    return c.g;
}

int main ()
{

cout<<a()<<endl;
   return 0;


}

in output dovrei avere la scritta "anni" ma non va..sicuramente sbaglio quando richiamo la funzione a() nel cout..sapete darmi qualche consiglio?

PM Quote
Avatar
vale77777 (Normal User)
Newbie


Messaggi: 15
Iscritto: 08/10/2018

Segnala al moderatore
Postato alle 14:32
Martedì, 16/10/2018
ho risolto in questo modo:
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
char *a()
{
    struct b
     { char g[10];
        int mese;
     };
     b c;
     c.mese=46;

    strcpy(c.g, "ciao");
char* i= new char[10];
strcpy(i,c.g);
    return i;
}

int main ()
{

cout<<a()<<endl;
   return 0;


}

ora il problema è con la struct:

#include <stdio.h>
#include <iostream>
using namespace std;

struct a{
int val1;
int val2;
};

struct a *funx01(){
struct a struttura;
struttura.val1 = 12;
struttura.val2=13;

return &struttura;
}


int main()
{
cout<< funx01()->val1;
cout<<funx01()->val2;


return 0;
}

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6378
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:05
Martedì, 16/10/2018
Per la questione struttura

Codice sorgente - presumibilmente C++

  1. struct a *funx01() {
  2.         struct a *struttura = new struct a;
  3.         struttura->val1 = 12;
  4.         struttura->val2 = 13;
  5.  
  6.         return struttura;
  7. }
  8.  
  9.  
  10. int main()
  11. {
  12.         struct a *t = funx01();
  13.  
  14.         cout << t->val1;
  15.         cout << t->val2;
  16.        
  17.         delete t;
  18.  
  19.         return 0;
  20. }



Attenzione al main e al delete (anche per il caso dell'array).

Ultima modifica effettuata da nessuno il 16/10/2018 alle 16:08


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
vale77777 (Normal User)
Newbie


Messaggi: 15
Iscritto: 08/10/2018

Segnala al moderatore
Postato alle 17:00
Martedì, 16/10/2018
#include <iostream>
#include <stdlib.h>
using namespace std;

struct a
{
    int val1;
    int val2;
};

a *funx01(){ //funx01 è di tipo struct


a* c;
c= new a;
c->val1=12;
c->val2=46;
return c;
}

int main()
{
   cout<<funx01()<<"\n";
cout<<funx01()->val1<<endl;
cout<<funx01()->val2<<endl;


return 0;
}
Codice sorgente - presumibilmente Plain Text

  1.  



nel frattempo avevo risolto in questo modo

PM Quote
Avatar
vale77777 (Normal User)
Newbie


Messaggi: 15
Iscritto: 08/10/2018

Segnala al moderatore
Postato alle 17:07
Martedì, 16/10/2018
riguardando mi sembra che abbiamo risolto allo stesso modo

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6378
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:36
Martedì, 16/10/2018
Sì ma nel main commetti degli errori.

Ti avevo scritto di fare diversamente e di usare il delete.

Chiamando tre volte la funzione con le tre cout hai fatto tre new diverse, creando tre strutture in memoria.
Non hai liberato la memoria di nessuna delle tre strutture e hai creato dei memory leak che, a lungo andare, creano problemi.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 699
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 21:59
Martedì, 16/10/2018
In alternativa alla creazione dinamica dell'oggetto nella funzione, potresti passare alla funzione stessa un puntatore ad un oggetto dichiarato in main, così da non doverlo distruggere esplicitamente...

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. struct b {
  6.     char g[10];
  7.     int mese;
  8. };
  9.  
  10. char *a( b *c ) {
  11.     c->mese=46;
  12.     strcpy( c->g, "anni" );
  13.     return c->g;
  14. }
  15.  
  16. int main () {
  17.     b c;
  18.     cout<<a(&c)<<endl;
  19.     return 0;
  20. }



ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 699
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 22:11
Martedì, 16/10/2018
Seguendo lo stesso ragionamento, anche con la seconda struttura è possibile questo:

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <stdlib.h>
  3. using namespace std;
  4.  
  5. struct a {
  6.     int val1;
  7.     int val2;
  8. };
  9.  
  10. a *funx01( a *ptr ){ //funx01 è di tipo struct
  11.     ptr->val1 = 12;
  12.     ptr->val2 = 46;
  13.     return ptr;
  14. }
  15.  
  16. int main() {
  17.     a c;
  18.  
  19.     funx01( &c );
  20.  
  21.     cout<<c.val1<<endl;
  22.     cout<<c.val2<<endl;
  23.  
  24.     return 0;
  25. }



ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 699
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 22:11
Martedì, 16/10/2018
Seguendo lo stesso ragionamento, anche con la seconda struttura è possibile questo:

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <stdlib.h>
  3. using namespace std;
  4.  
  5. struct a {
  6.     int val1;
  7.     int val2;
  8. };
  9.  
  10. a *funx01( a *ptr ){ //funx01 è di tipo struct
  11.     ptr->val1 = 12;
  12.     ptr->val2 = 46;
  13.     return ptr;
  14. }
  15.  
  16. int main() {
  17.     a c;
  18.  
  19.     funx01( &c );
  20.  
  21.     cout<<c.val1<<endl;
  22.     cout<<c.val2<<endl;
  23.  
  24.     return 0;
  25. }



ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo