TheKaneB (Member)
Guru^2
Messaggi: 1792
Iscritto: 26/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à.
|
|
Lawliet (Normal User)
Expert
Messaggi: 386
Iscritto: 09/04/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 |
|
Premoli (Normal User)
Pro
Messaggi: 108
Iscritto: 25/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 |
#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;
}
|
|
Lawliet (Normal User)
Expert
Messaggi: 386
Iscritto: 09/04/2009
|
Permettimi di chiederti chiarimenti:
Codice sorgente - presumibilmente C/C++ |
#include <stdlib.h>
#include <string.h>
#include <memory.h>
|
Perchè includere queste librerie? A cosa servono?
Codice sorgente - presumibilmente Plain Text |
fp=fopen("prova.txt", "w");
line = get_line();
fprintf(fp, "%s\n", line);
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++ |
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; }
|
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 |
altrimenti mi scuso in anticipo per aver solo "disturbato" ;-) |
Tranquillo non disturbi per niente, siamo in un forum, e chi propone soluzioni è benvenuto ^^ |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
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.
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.
che io non prendo da tastiera |
Come no ? E finora di cosa abbiamo parlato?
|
|
Lawliet (Normal User)
Expert
Messaggi: 386
Iscritto: 09/04/2009
|
Postato originariamente da theprogrammer:
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>
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.
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
Postato originariamente da theprogrammer:
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 |
|
TheKaneB (Member)
Guru^2
Messaggi: 1792
Iscritto: 26/06/2009
|
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 |
|