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++ - Passare array a un programma in C
Forum - C/C++ - Passare array a un programma in C

Avatar
finanza (Normal User)
Rookie


Messaggi: 24
Iscritto: 08/01/2008

Segnala al moderatore
Postato alle 18:11
Sabato, 16/02/2008
Ciao a tutti, sto scrivendo un programma in C che viene richiamato da uno in Java che gli passa alcuni parametri in questo modo:
process = Runtime.getRuntime().exec(EXE_PATH+""+IMG_NAME+"\" "+event.getX()+" "+event.getY());
In pratica passo una immagine e le coordinate di un punto di essa.
Il problema è che adesso non devo passare solo un punto, ma un numero non precisato di punti. In pratica la prima volta passo l'immagine e un punto, la seconda l'immagine e due punti, la terza tre e così via, finchè l'utente non decide di fermarsi...è possibile??

PM Quote
Avatar
Fmasso91 (Normal User)
Pro


Messaggi: 103
Iscritto: 01/01/2007

Segnala al moderatore
Postato alle 21:28
Sabato, 16/02/2008
Non conosco bene il java, ma penso che tu possa risolvere il tuo problema usando un semplice file di testo, in patica tu dal programma java crei un file di testo con le coordinate dei punti, poi al programma c passi : l'immagine, il numero delle coordinate da leggere e eventualmente il nome del file. A quel punto il programma c apre il file e legge il numero di punti che gli hai detto.


PM Quote
Avatar
bangirasu (Normal User)
Rookie


Messaggi: 39
Iscritto: 15/08/2007

Segnala al moderatore
Postato alle 0:17
Domenica, 17/02/2008
Non riesci a farlo banalmente leggendo argc e argv da C?

PM Quote
Avatar
finanza (Normal User)
Rookie


Messaggi: 24
Iscritto: 08/01/2008

Segnala al moderatore
Postato alle 15:26
Domenica, 17/02/2008
Testo quotato

Postato originariamente da Fmasso91:

Non conosco bene il java, ma penso che tu possa risolvere il tuo problema usando un semplice file di testo



L'avevo pensato anch'io ma volevo evitare di tirare in ballo i file...Come ha detto bangirasu volevo usare argv, ma non riesco a capire come utilizzarlo per far leggere un array! In pratica argv[2] è un array...come faccio ad accedere ai suoi elementi(ammesso sia possibile)??
Ho provato con
x1 = atoi(argv[2]);
y1 = atoi(argv[3]);
x2 = atoi(argv[4]);
e cosi' via, oppure
x1 = *argv[2];
y1 = *argv[3];
x2 = *argv[4];
Ma nessuno dei due funziona

PM Quote
Avatar
bangirasu (Normal User)
Rookie


Messaggi: 39
Iscritto: 15/08/2007

Segnala al moderatore
Postato alle 18:35
Domenica, 17/02/2008
Quello ke hai fatto tu mi sembrava giusto, forse hai passato un argomento e quindi argv[2] era vuoto...
argc è un intero che rappresenta il numero dei parametri
argv[] è un array che contiene delle stringhe, quindi è un array di puntatori a char

Ogni argv[X] lo puoi trattare come una stringa quindi puoi usare atoi, atof, ecc...

Nel codice che ti posto è mostrato anche come si acquisiscono le variabili di ambiente (non si sa mai ke possano servire...)
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[], char *envp[]) {
  4.          int i, j;
  5.          
  6.          printf("---------> ARGOMENTI PASSATI <---------\n\n");
  7.          printf("argc: %d\n", i);
  8.          for (i = 0; i < argc; i++)
  9.              printf("argv[%d]: %s\n", i, argv[i]);
  10.              
  11.          printf("\n\n---------> VARIABILI DI AMBIENTE <---------\n\n");        
  12.          /* Controlla e stampa le variabili di ambiente fin che non si arriva alla fine del
  13.          vettore di puntatori. Infatti nel costrutto for la condizione di avanzamento è
  14.          envp[j] = '\0', ovvero se l'elemento attuale è un NULL esci dal ciclo.*/
  15.          for (j = 0; envp[j] != '\0'; j++) {
  16.              printf("%s\n", envp[j]);
  17.          }
  18.  
  19.          return 0;
  20. }



ESEMPIO:
# ./es foo bar blablabla
---------> ARGOMENTI PASSATI <---------

argc: 4199408
argv[0]: ./es
argv[1]: foo
argv[2]: bar
argv[3]: blablabla

Ultima modifica effettuata da bangirasu il 17/02/2008 alle 18:43
PM Quote
Avatar
finanza (Normal User)
Rookie


Messaggi: 24
Iscritto: 08/01/2008

Segnala al moderatore
Postato alle 12:45
Martedì, 19/02/2008
Problema risolto, era più semplice del previsto: il fatto è che non gli si può passare direttamente un array, ma passare ciascun elemento di esso.
Lato Java
String params = getParams();
process = Runtime.getRuntime().exec(EXE_PATH+" \"C:\\Documents and Settings\\Mattia\\Documenti\\Dev-C++\\"+IMG_NAME+"\" "+params);

public String getParams()
{
   String params = "";
   int s = points.size();
   for(int i=0; i<s; i++)
   {
     Integer wrap = (Integer)points.get(i);
     params =   params.concat(wrap.toString()).concat(" ");           }
    
        return params;
}
Lato C:
path  = argv[1];
for(i=0; i<MAX_POINTS; i+=2)
{
     points   = atoi(argv[i+2]);
     points[i+1] = atoi(argv[i+3]);
}  

PM Quote