Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [C] Accodare stringhe da file di testo

    Ciao Ragazzi,
    ho la situazione seguente:

    /* Apertura file SQL */
    FILE *pfile;
    char* testo;
    char* testoQRY;

    testo="select sysdate from dual ";

    if((pfile = fopen(argv[1], "rb")) == NULL){
    printf("Sorry, can't open %s", argv[1]);
    return;
    }

    while(!feof(pfile))
    {

    if (fgets(testo,10,pfile)){
    printf("%s", testo);
    /*strncat(testoQRY,testo,10);*/
    }
    }

    fclose(pfile);

    printf("%s %s\n", "QUERY: ", testo);

    Nella variabile testo ho solo una parte del file letto

    Vorrei accodare man mano quello che leggo in testoQRY ma quell'istruzione commentata mi da:

    24640 Memory fault(coredump)

    Come mai?

    Come posso accodare in una stringa il valore del testo letto?

    Ciao!

  2. #2
    Sostituendo l'istruzione:

    char *testoQRY;

    con:

    char testoQRY[10000];

    funziona... però così ho un limite di 10000 bytes. Come posso ovviare? :master:

  3. #3
    Prima di tutto dovresti specificare il linguaggio, che presumo sia c.
    Ti consiglio di allocare dinamicamente la memoria che ti serve, di volta in volta.
    Fatti un'idea con questi link:
    http://www.cplusplus.com/reference/c...ib/calloc.html
    http://www.cplusplus.com/reference/c...ib/malloc.html
    http://www.cplusplus.com/reference/c...b/realloc.html
    http://www.cplusplus.com/reference/c...dlib/free.html

    Il problema alla base è che fai la strcat su un puntatore che punta a null.
    Nel secondo caso il puntatore passato alla strcat non punta a null ma a 10000 char.
    Per questo motivo non ti da errore.
    Prima di strcat(testoQRY,testo,10); esegui una realloc.
    Experience is what you get when you don’t get what you want

  4. #4
    Originariamente inviato da Xaratroom
    Prima di tutto dovresti specificare il linguaggio, che presumo sia c.
    Ti consiglio di allocare dinamicamente la memoria che ti serve, di volta in volta.
    Fatti un'idea con questi link:
    http://www.cplusplus.com/reference/c...ib/calloc.html
    http://www.cplusplus.com/reference/c...ib/malloc.html
    http://www.cplusplus.com/reference/c...b/realloc.html
    http://www.cplusplus.com/reference/c...dlib/free.html

    Il problema alla base è che fai la strcat su un puntatore che punta a null.
    Nel secondo caso il puntatore passato alla strcat non punta a null ma a 10000 char.
    Per questo motivo non ti da errore.
    Prima di strcat(testoQRY,testo,10); esegui una realloc.
    Uhm... giusto. Quindi provo ad allocare direttamente la memoria che mi serve.

  5. #5
    Ho provato in questo modo:

    Codice PHP:
    /* Apertura file SQL */
       
    FILE *pfile;   
       
    chartesto;
       
    char *testoQRY;
       
    int cont;
       
       
    testo="select sysdate from dual ";
       
       if((
    pfile fopen(argv[1], "rb")) == NULL){
           
    printf("Sorry, can't open %s"argv[1]);
           return;
       }

       while(!
    feof(pfile))
       {
              
         if (
    fgets(testo,10,pfile)){
             
    printf("%s"testo);
             
    cont++;
             
    testoQRY realloc (testoQRYcont 10);
             
    strcat(testoQRY,testo);
         }
       }
          
       
    fclose(pfile); 
    Ma mi da comunque:

    26440 Memory fault(coredump)

    Come mai? :master:

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Perche' utilizzi il puntatore testo senza avere allocato lo spazio in memoria ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Ho provato in questo modo ed adesso funziona:

    Codice PHP:
    /* Apertura file SQL */
       
    FILE *pfile;   
       
    chartesto;
       
    chartestoQRY;
       
       
    testo=(char*) malloc (1);;
       
    testoQRY=(char*) malloc (1);

       if((
    pfile fopen(argv[1], "rb")) == NULL){
           
    printf("Sorry, can't open %s"argv[1]);
           return;
       }

       while(!
    feof(pfile))
       {
              
         if (
    fgets(testo,10,pfile)){
             
             
    printf("%s"testo);
             
             
    strncat(testoQRY,testo,10);
         }
       }
          
       
    fclose(pfile);
       
       
    printf("%s %s\n""QUERY: "testoQRY); 
    Grazie a tutti

  8. #8
    Experience is what you get when you don’t get what you want

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da Xaratroom
    Effettivamente qui non la usa http://www.cplusplus.com/reference/c...b/realloc.html
    Non usa ... cosa?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da magnus
    Ho provato in questo modo ed adesso funziona:
    No ... il programma ha errori gravi ...

    Non puoi leggere 10 caratteri in memoria se ne hai allocato 1 ...
    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 © 2024 vBulletin Solutions, Inc. All rights reserved.