Newsgroup: it.comp.lang.c
Titolo: passaggio parametri

Ho la seguente funzione
char* stampa(char* input) {
char pippo[1024];
FILE *f;
f=popen("input","w");
while(fscanf(f,"%s",pippo)!=EOF){ }
pclose(f);
return pippo;
}
che richiamo all' interno di un altro programma come
buf2=stampa(buf);
essendo
char buf[1024],buf2[1024];
ma ci da come errore incompatible types in assignment
dov'e' l'errore?
--------------------------------
Inviato via 
http://arianna.libero.it/usenet

 }
A occhio direi  f= popen(..)
f   e' un FILE*,
mentre  popen(), se non e' dichiarata da qualche parte
e' considerata con   int popen(...)
Comunque ci sono alcune cose 'strane',
il parametro  input  non e' usato
( usi pero' la stringa  "input"  che e' un'altra cosa )
popen   potrebbe essere   fopen  ?
Se cosi' fosse,  f  e' aperto con "w", cioe'  write,
mentre dopo fai uno fscanf(), che prevede
un file aperto in lettura
La variabile pippo e' locale alla function  stampa,
non puoi usarla con  return .
Ciao
E.

 dov'e' l'errore?
1) buff2 e' un array e non un puntatore;
2) stai restituendo un puntatore ad una
   sona di memoria che non esiste piu'.
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

...

Buonasera,
nel suo programma c'è più di un errore.
1 - Se lei dichiara al variabile "pippo" all'interno della funzione
stampa l'istruzione
return pippo;
è concettualmente sbagliata poiché la funzione ritorna sì il puntatore
al primo elemento dell'array ma questo valore si riferisce ad un'area
di memoria che viene immediatamente liberata, o meglio, resa
disponibile per altri dati (si ricordi che, al termine di una
funzione, la memoria dedicata alle variabili locali viene liberata).
Una soluzione è passare alla funzione anche il puntatore alla stringa
in cui si vuole che venga scritto l'output.
2 - Sinceramente non ricordo di aver mai sentito parlare delle
funzioni popen e/o pcloce (sono ANSI?): in ogni caso se funzionano
(come mi sembra di capire) in modo simile alla fopen e alla fclose
dopo la fopen è buona norma controllare che l'operazione sia andata a
buon fine verificando che il valore di f non sia NULL.
3 - In ANSI C non esiste il tipo stringa, si usano gli array di
caratteri. Questo comporta delle limitazioni per cui NON è possibile
effettuare assegnazioni del tipo
char a[10], b[10];
a = b;
Questo succede perché, quando lei dichiara le due variabili a e b (in
modo statico), viene allocata un'opportuna regione di memoria fissa e
dedicata a loro: a e b sono proprio i puntatori a queste due aree di
memoria e non possono essere cambiati. Per effettuare l'operazione di
copia tra stringhe esiste l'apposita funzione strcpy (anche se è
consigliabile la strncpy che effettua il bound-checking). Ad esempio
char a[10] = "ciao", b[10];
strncpy (b, a, 10);
Questa funzione, tuttavia, non riguarda in particolare il suo
problema. Se proprio lei non vuole passare alla funzione stampa il
puntatore della stringa di output può allocare dinamicamente
un'opportuna area di memoria all'interno della funzione e restituire
il puntatore a quest'area. La variabile che riceve il risultato della
funzione, tuttavia, deve essere un puntatore a carattere:
char *res;
res = stampa (buf);
S.B.