Newsgroup: it.comp.lang.c
Titolo: Programma in C da Win a Linux: problema!

Ciao a tutti,
ho creato un programma in linguaggio C, che serve per gestire la
distribuzione degli studenti in aule. Ho sempre usato Windows, quindi ho
fatto il programma usando win. Ora il mio prof. vuole che il programma giri
sotto linux.
Poichč č scritto in ANSI C, senza usare alcun tipo di libreria particolare,
non ci sarebbero dovuti essere problemi.
Il compilatore gcc di linux me lo compila senza errori nč warning, mi crea
l'eseguibile, ma quando lo eseguo ottengo il seguente risultato:
SEGMENTATION FAUL.
Ho provato a capire per quale motivo ciņ accada, scoprendo che solitamente
si ferma alla seconda lettura di un file. Mi spiego: io leggo un file di
input una prima volta usando fgets in un ciclo for. Poi usa la rewind per
mandare indietro il puntatore al file e lo rileggo in seguito. Pensavo fosse
quello il problema, ma poi ho sostituito la rewind da una fclose seguita poi
da una fopen di nuovo, ma il problema non saprisce. Non so cosa sia
successo.
Se qualcuno di voi č pratico di programmazione in C sotto Linux e magari
vuole che gli dia altre informazioni, magari gli spiego meglio.
Vi ringrazio anticipatamente.
Ciao a tutti.
Sergio

 SEGMENTATION FAUL.
Controlla i tuoi stack, probabilmente usi variabili locali, li ritorni, ma
lo stack non li ha piu': crash.
Esempio:
char *ciao(void) {
    char a[5];
    strcpy(a,"ciao");
    return a;
}
Se ti va bene il contenuto di a[] ci sara' ancora, se ti va male: crash. Con
un
    static char a[5];
la cosa si risolve.
Se non trovi l'errore posta un pezzo di codice (che crasha)...
HTH
Ju

 > Il compilatore gcc di linux me lo compila senza errori nè warning, mi


   strcpy(elencoELN[i].cognome,cognome);
controllo su sizeof(elencoELN[i].cognome) non fa male...
Allora, oltre a fare piu' controlli sulla validita' dei dati ti consiglio di
creare piu' funzioni per le 'puliture' che fai sugli string.
HTH
Ju
P.S.: Evita il top-posting (quota sopra).

 P.S.: Evita il top-posting (quota sopra).
Non sono pratico di newsgroup. Così come ho fatto va bene?

Ho risolto il problema!!!
Sai cosa era?
Avevo definito MAXR 80
quando faceva la fgets i caratteri erano 81 e andava a corrompere lo stack!
Ti ringrazio tanto davvero, mi sei stato di grande aiuto!
A presto!
Ciao ciao.
Sergio

 Non sono pratico di newsgroup. Cosě come ho fatto va bene?
Perfetto!
;-)

 hai detto tu. L'ho chiamata ipow.
I compilatori funzionano sulla base di numerosi passi.
Per creare un eseguibile l'ultimo deve essere il linker.
Esso raccoglie tutto (oggetti derivati dal codice e librerie)
controlla che siano presenti tutte le funzioni e quindi crea
il file eseguibile.
Di solito e' proprio un diverso programma rispetto al
compilatore pero' viene chiamato automaticamente.
Bisogna informarlo delle librerie necessarie a compilare
il programma. Questo in Visual C per la libreria math viene fatto
automaticamente, sotto Unix no.... bisogna aggiungere
sulla linea di comando del compilatore l'opzione -lm.
Altrimenti il linker non trova la libreria e protesta dicendo
che non riesce a trovare la funzione (ad esempio pow)
usata nel modulo (pippo.o).
                               Andrea Zaghi

Grazie mille anche a te!
Ho imparato una cosa in più!
con la programmazione in C sotto Linux non sono per niente ferrato!
Ciao ciao.
Sergio

con la programmazione in C sotto Linux non sono per niente ferrato!
dai un'occhiata a 
http://www.firenze.linux.it/~piccardi/gapil/
e poi frequenta gli NG linux
--
Rhymes
rhy...@myself.com