|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2002
Città: Porto Sant' Elpidio (ap)
Messaggi: 789
|
[c] con queste stringhe proprio non ci capiamo
Raga innanzitutto devo dire che col c sono abbastanza scarso, quindi non sorprendetevi se dico scemenza grosse quanto l'uccellino di del piero a striscia la notizia
![]() allora purtroppo la scuola mi impone di fare 1 progetto d'esame e di lavorare sotto linux(che dà 1 sacco di errori in in compilaizone, mannaggia). Cmq il problema non è in compilazione, ma in esecuzione del programma. Si tratta di 1 funz che prende 1 stringa da 1 file di testo e la ricopia su 1 altro, mettendoci tra () il numero di riga. Il problema è che purtroppo il prog mi legge solo 3 caratteri, e poi inserisce un nouvo numero di riga, mentre va a capo solo quando lo fa il file di input. ecco il codice della funzione incriminata: void lines_elab (FILE *file_in, FILE *file_out) { int lineCount = 1; char *stringa while (!feof (file_in)) { stringa = malloc((sizeof(char)) * strlen(stringa)); fgets(stringa, sizeof(stringa), file_in); fprintf(file_out, "(%d) " , lineCount); fprintf(file_out , "%s" , stringa); lineCount++; stringa[0] = '\0' ; free(stringa); } } fine! manca il codice x terminare la funzione se nn c'è + memoria, questo lo so. il comando stringa[0] = '\0' mi è stato necessario perchè dove c'erano file in input che avevano un ritorno a capo come ultimo carattere mi veniva copiata tutta la stringa che precedeva il ritorno a capo, quando in realtà doveva essere 1 linea vuota (se mi correggete anche questo problema è cosa gradita). ringraziando tutti e sperando di aver postato a dovere (è la 1 volte che posto in questa sezione) vi saluto
__________________
Abit aw9-d max, pentium code 2 duo E7300, sapphire radeon hd 4750, corasir 650W |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Re: [c] con queste stringhe proprio non ci capiamo
Vecchia Spugna bevi troppo
![]() Codice:
stringa = malloc((sizeof(char)) * strlen(stringa)); Codice:
fgets(stringa, sizeof(stringa), file_in);
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#3 | ||
Senior Member
Iscritto dal: Oct 2002
Città: Porto Sant' Elpidio (ap)
Messaggi: 789
|
Re: Re: [c] con queste stringhe proprio non ci capiamo
Quote:
capito, ma cosa ci metto? se provo a metterci strlen(stringa) mi crea 1 file di dimensioni apocalittiche e va in loop infinito, anche se compila e nn da warning, se ci metto 1 numero intero il prog funzia Quote:
__________________
Abit aw9-d max, pentium code 2 duo E7300, sapphire radeon hd 4750, corasir 650W |
||
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1449
|
Come fai ad utilizzare strlen(stringa) considerando che stringa è semplicemente dichiarato come un array di caratteri, se pure fosse una stringa hai comunque sbagliato a posizionare l'istruzione che andava messa fuori il ciclo while.
__________________
Ciao ~ZeRO sTrEsS~ |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
|
+ che altro come fai ad usare strlen() su un qualcosa che ancora non è una stringa , ma solo un puntatore a caratteri! Mettici un numero fisso che è il numero massimo di caratteri in una riga .
Ciao
__________________
GPU Compiler Engineer |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Re: Re: Re: [c] con queste stringhe proprio non ci capiamo
Quote:
char *stringa = NULL; nella dichiarazione della variabile, e vedrai il crash immediato. In sintesi, devi utilizzare un buffer di dimensione massima da te scelta, e utilizzare quella dimensione massima in luogo della strlen e di sizeof. strlen è valido solo se la stringa è sia _allocata_ che _inizializzata_.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Oct 2002
Città: Porto Sant' Elpidio (ap)
Messaggi: 789
|
wow!
chiarissimo, grazie!!! ![]()
__________________
Abit aw9-d max, pentium code 2 duo E7300, sapphire radeon hd 4750, corasir 650W |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:06.