Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    153

    c++ tipo di ritorno char[]

    buon giorno a tutti:
    ho questo problema. Data una classe fatta cosi:
    Codice PHP:
    class CIAO{
       private:
           
    char c[32];
       public:
           
    CIAO();
           [
    tipo di ritornoget_c(){return c;} 
    e il main:
    Codice PHP:
    int main{
        
    CIAO x;
        
    char a[64];
        
    a=get_c();

    nella funzione get_c() che tipo di ritorno devo mettere affinché quando scrivo c=get_c() mi copi il contenuto di c in a? grazie
    cogli l'attimo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non puoi usare le

    string

    di C++ ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Assumendo che quell'array di caratteri sia una stringa C, farei così:

    Codice PHP:
    #include <iostream>
    #include <string.h>

    using namespace std;

    class 
    T
    {
        private:
            
    chartext;
        public:
            
    T(){ text = new char[32]; text "buonasera a tutti"; }        
            ~
    T(){ delete [] text; }
            
    charget_c(){return text;}
    };

    int main()
    {
        
    T x;
        
    char a[64];
        
    strncpy(ax.get_c(), 63);
        
    a[63] = '\0';
        
        
    cout << << endl;

    Se invece non è terminata da NULL ma è un array vero e proprio, non mi pare tu possa fare molto. Dovresti copiare carattere a carattere, utilizzando un indicatore di lunghezza (correggetemi se sbaglio).

    Non ho idea del perchè mi scriva private:/> dopo aver inviato le modifiche.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    153
    eh magari sarebbe troppo facile...devo per forza usare gli array di char.
    io avevo pensato a diverse soluzioni del tipo:
    Codice PHP:
    struct boh{
     
    char c[32]};

    boh get_c(){return boh;} 
    oppure usare l'allocazione dinamica del tipo char *c=new char(32);
    e char* get_c(){return c;}

    però non so se sono giuste e quale convenga usare!
    ----
    @antotan grazie cmq gli array di char sono tutti terminati da '\0'.

    ho una domanda. se uso l'allocazione dinamica della memoria dopo posso usare le funzioni della libreria cstring? grazie
    cogli l'attimo

  5. #5
    Allora puoi usare la strncpy come ti ho scritto nell'esempio (che riscrivo perchè si è mangiato un \0).

    Certo che puoi usare le funzioni della cstring (come lo è strncpy ad esempio). Estendo l'esempio.

    codice:
    #include <iostream> 
    #include <cstring> 
    
    using namespace std; 
    
    class T 
    { 
        private:
    		char* text; 
        public: 
            T(){ text = new char[32]; text = "buonasera a tutti"; }         
            ~T(){ delete [] text; } 
            char* get_c(){return text;} 
    }; 
    
    int main() 
    { 
        T x; 
        char a[64]; 
        strncpy(a, x.get_c(), 63); 
        a[63] = '\0'; 
        cout << a << endl; 
    	
    	
    	char b[11];
    	strncpy(b, x.get_c(), 4);
    	strncat(b, "giorno", 6);
    	b[10] = '\0';
    	
    	cout << "Stringa (len=" << strlen(b) << "): " << b<< endl;
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    153
    faccio un'altra domanda qua per non aprire un nuovo topic perché mi sembra inutile:

    ho una getline(c,200,'\n')
    nel caso inserisco più di 200 char qualquno mi rimane sul buffer di cin
    c'è un modo per buttarli via che non sia cin.ignore?
    cogli l'attimo

  7. #7
    Puoi crearti la tua getline volendo. Prendi quanti caratteri vuoi uno alla volta però non hai problemi sui caratteri che rimangono dentro se sfori:

    codice:
    #include <iostream> 
    
    using namespace std; 
    
    void getln(char* buffer, int bufflen, int size, char delim)
    {	
    	if(size == 0) 
    	{
    		buffer[0] = '\0';
    		return;
    	}
    
    	int index = 0;
    	do {
    		buffer[index] = cin.get();
    		if(buffer[index] == '\n') 
    			break;		
    		index++;
    	} while(index < size && index < bufflen-1 && buffer[index-1] != delim);	
    		
    	buffer[index] = '\0';
    }
    
    int main() 
    {
    	const int bufflen = 16;
    	char buff[bufflen];
    	getln(buff, bufflen, 3, '\n');
    	cout << "\n\nStringa: " << buff << endl;
    	cout << "strlen = " << strlen(buff) << endl;
    }
    La funzione legge fino a min(bufflen-1, size) caratteri al massimo, se non incontra il delimitatore.
    bufflen-1 perchè, ovviamente, se un array di char è lungo n, il carattere n-1 deve essere il terminatore.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    153
    ok grazie aprò un nuovo thread perché con il getline ho un sacco di problemi e non sono sicuro che posso implementare un mia getline visto è un esercizio dove ci sono un sacco di limitazioni tra cui l'impossibilità di usare le stringhe stile c++ ecc ecc
    cogli l'attimo

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.