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

    [C++] Puntatore ad una struttura

    Ciao a tutti.
    Dovrei creare un puntatore che punti alla struttura process_information.
    Come fare?!
    (il "corpo" del mio programma scritto finora si trova tutto nella funzione void nuovoprofilo())
    codice:
    #include <iostream>
    #include <stdlib.h>
    #include <fstream>        
    #include <windows.h>   //include la funzione CreateProcess()
    #define MAX 50
    using namespace std;
    char nome_cognome[MAX];
    void nuovoprofilo();
    
    int main()
    	{
    	char ch;
        cout << "Nuovo (n), Salvare (s) Lanciare (r) Uscire (q)" << endl;
        cin >> ch;
    	while (ch!='q')
    		{
    		switch (ch)
    			{
    			case 'n':
    				nuovoprofilo();
    				break;
    			case 's':
    				//salvaprofilo();
    				break;
    			case 'r':
    				//lanciaprofilo();
    				break;
    			default : cout << "Nuovo (n), Salvare (s) Lanciare (r) Uscire (q)" << endl;
    			}
    		cin >> ch;
    		}
        return 0;
    	}
    	
    	
    void nuovoprofilo()
    {
    cout << "Inserire nome e cognome" << endl;
    cin.getline(nome_cognome,MAX);  //perchè non funziona?!
    cin.getline(nome_cognome,MAX);
    system("\"mkdir C:\\cygwin\\home\\Ciucci\\voxforge_2\"");            
    system("\"mkdir C:\\cygwin\\home\\Ciucci\\voxforge_2\\HTK_Scripts\"");                                  
    system("\"xcopy C:\\cygwin\\home\\Ciucci\\voxforge\\HTK_Scripts C:\\cygwin\\home\\Ciucci\\voxforge_2\\HTK_Scripts\""); 
    system("\"mkdir C:\\cygwin\\home\\Ciucci\\voxforge_2\\auto\"");
    ofstream fout ("C:\\cygwin\\home\\Ciucci\\voxforge_2\\auto\\sample.grammar");
    fout << "S : NS_B COMANDO OGGETTO NS_E" << endl << "S : NS_B RICHIESTA NS_E" << endl;
    fout.close();
    ofstream fout2 ("C:\\cygwin\\home\\Ciucci\\voxforge_2\\auto\\sample.voca");
    fout2 << "% NS_B" << endl << "<s>        sil" << endl << endl << "% NS_E" << endl << "</s>        sil" << endl << endl << "% COMANDO" << endl << "ACCENDI      a cc e n d i" << endl << "SPEGNI	     s p e ggn i" << endl << endl << "% OGGETTO" << endl << "LUCE             l u c e" << endl << "TEIERA           t e j e r a" << endl << endl << "% RICHIESTA" << endl << "AIUTO       a j u t o" << endl;
    fout2.close();
    
    BOOL esito;
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si)); // serve per azzerrare la struttura si
    si.cb = sizeof(si); // il campo cb deve essere valorizzato alla dimensione
    // della struttura
    si.lpTitle = "Processo figlio Cygwin.bat";
    // crea il processo figlio
    esito = CreateProcess
                         (
                          NULL, // nome dell'eseguibile (viene usata la riga di comando)
                          "C:\\cygwin\\Cygwin.bat", // percorso del programma che voglio eseguire
                          NULL, // indica che il processo non è ereditabile dai processi figli
                          NULL, // indica che il thread associato al processo non è ereditabile
                          FALSE, // i diritti ereditati dal processo non passano ai figli
                          CREATE_NEW_CONSOLE + NORMAL_PRIORITY_CLASS, // opzioni di creazione
                          // (0 per nessuna); in questo caso imposto priorità e creazione
                          // del processo figlio in una nuova finestra console
                          NULL, // puntatore ad un blocco di variabili d’ambiente.
                          // in questo caso vengono usate quelle del padre.
                          NULL, // directory di lavoro per il processo figlio.
                          // In questo caso viene usata la directory corrente del processo padre
                          &si, // puntatore ad una struttura STARTUPINFO
                          &pi // puntatore ad una struttura PROCESS_INFORMATION
                          );
    if (esito == TRUE) 
              {
              cout<<"Processo creato regolarmente"<<endl;
              } 
    else 
         {
         cout<<"CreateProcess fallito!"<<endl;
         }
       
    }

  2. #2
    Ecco un esempio di dichiarazione ed utilizzo di un puntatore a struttura:

    codice:
      
    struct MiaStruttura{
      int a;
      int b;
    };
    
    int main() {
      struct MiaStruttura x;
      struct MiaStruttura*p;		/*ecco il puntatore a struttura */
    
      p=&x;				
      (*p).a=100;
    
    /*in alcuni codici troverai il simbolo -> al posto di (*nomepuntatore) ma sono equivalenti */
    }
    Spero che questo ti aiuti


    Ciao

  3. #3
    Non ho capito.
    Per il semplice motivo che non so le strutture e le devo studiare.
    C'è qualche manuale?!
    Io ho guardato qualcosina sulle strutture e credo di aver capito che siano dei "contenitori" che contengono variabili di vario tipo.
    Nel mio caso, la struct PROCESS_INFORMATION dovrebbe contenere una variabile che contiene il PID del mio programma. Io però non so come è fatta dentro questa struttura. Non so come si chiama la variabile che conterrà il PID del programma.
    Non so se mi sono spiegato...
    Come faccio a creare un puntatore che punti alla variabile corretta?! Questo è il mio problema
    Un saluto

  4. #4
    Risolto.
    Ho trovato la struttura e ho fatto un puntatore che puntasse a quello che mi interessava

  5. #5
    Perfetto..

    In ogni caso studia le liste su un buon libro di C altrimenti, se ti interessano solo i concetti fondamentali, in qualsiasi guida on-line, per esempio quella su HTML.it.


    Ciao

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.