Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Usare fwrite per un vettore di caratteri
Forum - C/C++ - Usare fwrite per un vettore di caratteri - Pagina 4

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 20:24
Martedì, 30/06/2009
oppure inserisci nel file binario dei campi di tipo "Descriptor" (come ho detto qualche post fa) che contengono la dimensione esatta della stringa relativa, con tanto di riferimento (ID) e offset. Il metodo può sembrare macchinoso da implementare, ma è portabile e consente una grande flessibilità.

PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 22:44
Martedì, 30/06/2009
Si, ma per un progettino piccolo (misero).. da consegnare all'università è un pò eccessivo.. e poi c'avevo provato e il professore ha detto che non vuole che implementiamo altre strutture(vuole solo quelle della documentazione richiesta dal prof). Per questo volevo risolvere direttamente dalla fwrite con malloc o con chissà cosa, ma senza aggiungere altre cose nel tuo caso 2 strutture. Capito cosa volevo? :)

Ps. non è colpa mia, eppure lui mi ha dato la via di usare char *<identificatore> -.-
Altrimenti avrei fatto diversamente! -.-'

Ultima modifica effettuata da Lawliet il 30/06/2009 alle 22:46
PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 23:39
Martedì, 30/06/2009
ciao...
se ho ben capito tu vorresti scrivere senza dare una dimensione massima...
anche io una volta volevo fare una cosa del genere e ho tirato fuori questo...
guarda un po' e vedi se può interessarti...
altrimenti mi scuso in anticipo per aver solo "disturbato" ;-)

Codice sorgente - presumibilmente Plain Text

  1.  


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>

char * get_line()
{
    char * line = (char*)malloc(sizeof(char));
    int i = 0;

    do
    {
        line = (char*)realloc(line, ++i);
      line[i-1]=getchar();
    }
    while(line[i-1] != '\n');

    line[i-1] = '\0';

    return line;
}

int main()
{
   FILE *fp;
    char * line, invio;

   fp=fopen("prova.txt", "w");

    line = get_line();

    fprintf(fp, "%s\n", line);
    printf("\nScrittura avvenuta");

    fclose(fp);

   printf("\n\nPremere un tasto per continuare...\n\n");
   scanf("%c", &invio);

    return 0;
}

PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 23:54
Martedì, 30/06/2009
Permettimi di chiederti chiarimenti:

Codice sorgente - presumibilmente C/C++

  1. #include <stdlib.h>
  2. #include <string.h>
  3. #include <memory.h>


Perchè includere queste librerie? A cosa servono?

Codice sorgente - presumibilmente Plain Text

  1. fp=fopen("prova.txt", "w");
  2. line = get_line();
  3. fprintf(fp, "%s\n", line);
  4. printf("\nScrittura avvenuta");



La mia richiesta è in particolare per la scrittura a file binaria, ma più importante ancora la lettura sempre in modalità binaria. Quindi non ho problemi per adesso nella scrittura normale.

Codice sorgente - presumibilmente C++

  1. char * get_line()
  2. {
  3.     char * line = (char*)malloc(sizeof(char));
  4.     int i = 0;
  5.     do
  6.     {
  7.       line = (char*)realloc(line, ++i);
  8.       line[i-1]=getchar();
  9.     }
  10.     while(line[i-1] != '\n');
  11.     line[i-1] = '\0';
  12.     return line;
  13. }


Potrebbe essere una funzione utile, a differenza che io non prendo da tastiera, ma il problema non è qui. E': nella lettura come fai?
Ps. Non fai la deallocazione della memoria qui?
Codice sorgente - presumibilmente Plain Text

  1. free();




Testo quotato

altrimenti mi scuso in anticipo per aver solo "disturbato" ;-)


Tranquillo non disturbi per niente, siamo in un forum, e chi propone soluzioni è benvenuto ^^

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 2:18
Mercoledì, 01/07/2009
Testo quotato

Perchè includere queste librerie? A cosa servono?



Non sono librerie ma file header.

Sono necessari per la dichiarazione di tipi/costanti/prototipi di funzione per le stringhe e l'allocazione della memoria.

Testo quotato

La mia richiesta è in particolare per la scrittura a file binaria, ma più importante ancora la lettura sempre in modalità binaria. Quindi non ho problemi per adesso nella scrittura normale.



Non ho capito bene cosa intendi dire.

Una volta ottenuto il puntatore alla linea dovrai utilizzare la strlen e la fwrite avendo cura di salvare anche la lunghezza della stringa in binario prima della stringa stessa.

Testo quotato

che io non prendo da tastiera



Come no ? E finora di cosa abbiamo parlato?

PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 3:11
Mercoledì, 01/07/2009
Testo quotato

Postato originariamente da theprogrammer:

Testo quotato

Perchè includere queste librerie? A cosa servono?



Non sono librerie ma file header.

Sono necessari per la dichiarazione di tipi/costanti/prototipi di funzione per le stringhe e l'allocazione della memoria.



Mmm.. questa mi è nuova, mi funzionano lo stesso anche se non includo quei file header. Sarà la stessa cosa per system() che funziona senza includere <stdlib.h>

Testo quotato

Postato originariamente da theprogrammer:
La mia richiesta è in particolare per la scrittura a file binaria, ma più importante ancora la lettura sempre in modalità binaria. Quindi non ho problemi per adesso nella scrittura normale.

Testo quotato

Non ho capito bene cosa intendi dire.



Una volta ottenuto il puntatore alla linea dovrai utilizzare la strlen e la fwrite avendo cura di salvare anche la lunghezza della stringa in binario prima della stringa stessa.



Eh si, ritenevo importante la lettura (perchè dopo aver capito grazie a thekane, non è più difficile scrivere, cosa che prima non mi scriveva bene.),quindi devo leggere e senza dimensione fissa non posso farlo se non erro, altrimenti potrei farlo "complicandomi la vita" come hai detto tu, e tra l'altro il prof non vuole.. quindi.. xD

Testo quotato

Postato originariamente da theprogrammer:

Testo quotato

che io non prendo da tastiera



Come no ? E finora di cosa abbiamo parlato?




Eh si il progetto comprende varie funzioni, tra cui una è anche quella di aggiungere nella struttura che comprende il vettore di stringhe.
E poi se voglio utilizzare solo la funzione carica dal file, non è necessario che debba immettere da tastiera. Ce l'ho già caricata in memoria del file. Questo è solo un esempio molto semplice per capire come potevo risolvere questo problema, alla fine è lo stesso.

Ultima modifica effettuata da Lawliet il 01/07/2009 alle 3:17
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 13:21
Mercoledì, 01/07/2009
Testo quotato

Postato originariamente da Lawliet:

Si, ma per un progettino piccolo (misero).. da consegnare all'università è un pò eccessivo.. e poi c'avevo provato e il professore ha detto che non vuole che implementiamo altre strutture(vuole solo quelle della documentazione richiesta dal prof). Per questo volevo risolvere direttamente dalla fwrite con malloc o con chissà cosa, ma senza aggiungere altre cose nel tuo caso 2 strutture. Capito cosa volevo? :)

Ps. non è colpa mia, eppure lui mi ha dato la via di usare char *<identificatore> -.-
Altrimenti avrei fatto diversamente! -.-'



ah ok! Non avevo capito che si trattava di un esercizio del prof, pensavo fosse per un tuo programmino ;)

PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo