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

    [c] eliminazione stringhe doppioni su file - crash della funzione gets

    Salve,

    ho creato un programma che legge delle stringhe ( ordinate ) da file ed elimina
    i doppioni, salvando il risultato in un altro file.

    la funzione gets, per prelevare una stringa ( il file continiene una stringa per riga),
    va in crash.

    grazie!

    codice:
    int main(void) { 
    char* filenameuno = malloc( sizeof(char)); 
    char* filenamebis = malloc( sizeof(char)); 
    FILE* source; 
    char* first=""; 
    char* second=""; 
    
    printf("\n Duplicate Cleaner "); 
    printf("\n---------------------------------------------------\n"); 
    printf("inserisci il nome del file:"); 
    scanf("%s",filenameuno); 
    printf("\n"); 
    
    filenamebis = namer(filenameuno); 
    
    source = fopen(filenameuno, "r"); 
    
    printf("\n Eliminazione doppioni in corso ... "); 
    printf("\n---------------------------------------------------\n"); 
    
    gets(first); 
    gets(second); 
    
    while (feof(source)==0) { 
          if( strcmp(first,second)!= 0) { 
            printmail(filenamebis, first); 
            strcpy(first, second); 
         } else { 
        gets(second); } 
    } 
    fclose(source); 
    printf("\n Pulitura Terminata!! "); 
    system("PAUSE"); 
    return EXIT_SUCCESS; 
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    first e second sono puntatori non validi dato che non hai allocato spazio, ovvio che la gets ha problemi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Ho inizializzato le variabili in fase di dichiarazione,
    ma da il problema ugualmente.

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    gets() è ufficialmente deprecata dallo standard C / C++, ergo non va usata. Al suo posto si usa fgets:
    http://www.cplusplus.com/reference/c.../cstdio/fgets/


    first e second non sono allocate, quindi vai a scrivere in zone vietate.
    Idem per filenameuno e filenamebis dal momento che riservi loro solo un char. Non ti sembra un po' poco?
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da matteo martis
    Ho inizializzato le variabili in fase di dichiarazione,
    ma da il problema ugualmente.
    Non hai capito ... non hai allocato lo spazio ... non serve inizializzare se non hai allocato lo spazio.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    shodan... le variabili filename le ho fatte altre volte in questo modo e hanno sempre funzionato.... io non ho allocato un solo char, ma ho detto le la variabile filename è un array di caratteri e di allocare per ogni elemento uno spazio corrispondente a quello del char...
    per le variabili first e second ho ho aggiunto il codice per la malloc

  7. #7
    adesso il problema si è spostato nel ciclo

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da matteo martis
    shodan... le variabili filename le ho fatte altre volte in questo modo e hanno sempre funzionato....
    shodan ha perfettamente ragione (ovviamente) ... hai fatto sempre così e hai sempre sbagliato, se ha funzionato è solo per caso dato che l'input sarà andato a sporcare memoria senza causare crash evidenti (fatto ancora più pericoloso).

    io non ho allocato un solo char
    Come no? E questa

    char* filenameuno = malloc( sizeof(char))

    cosa vuol dire?

    ma ho detto le la variabile filename è un array di caratteri
    Hai detto che filenameuno è un "puntatore a char" e precisamente punta ad un solo char allocato in memoria.

    e di allocare per ogni elemento uno spazio corrispondente a quello del char...
    Scusa, ma da quale libro hai studiato?

    per le variabili first e second ho ho aggiunto il codice per la malloc
    Con un numero sufficiente di caratteri ... spero non solo uno.

    Sinceramente, devi rivedere sul libro su cui studi tutta questa parte (puntatori, vettori, allocazione ...)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    appena avrò un attimino di tempo, ristudierò quelle parti

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da matteo martis
    appena avrò un attimino di tempo, ristudierò quelle parti
    Certo ... era solo un consiglio se vuoi continuare a scrivere questi programmi ...

    Già avevi avuto a che fare con questi problemi ...

    http://forum.html.it/forum/showthrea...readid=1466632
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.