Newsgroup: it.comp.lang.c
Titolo: Lettura file

Salve a tutti,
Sono un utente novizio del c. Vorrei creare un programma che legga in
input del testo quantitativamente maggiore di 255 caratteri e che
comprenda anche gli spazi. Ho trovato la funzione gets ma risolve solo
il secondo problema. Esiste una funzione alternativa? Inoltre ho cercato
di leggere un file e mano mano di memorizzarlo all'interno di una
variabile dinamica ma purtroppo il programma blocca tutto. Grazie a
tutti!
#include <iostream.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
void mostra_ed_indica(void);
void apri_file(char *nomefile);
void chiedi_nome(char *s);
FILE *fpin;
char *testo;
int k;
int main()
{
        char nomefile[255];
 
        chiedi_nome(nomefile);
        apri_file(nomefile);
        mostra_ed_indica();
}
void mostra_ed_indica(void)
{
        int c;
 
        while ((c = fgetc(fpin)) != EOF) {
                putchar(c);
                k++;       
                testo[k] = c; <<<< DA QUI IN POI SI BLOCCA IL COMPUTER
        }
        fclose (fpin);
        printf("k: %s",kk);
}
void apri_file(char *nomefile)
{
        if ((fpin = fopen(nomefile, "r")) == NULL) {
                printf("Non riesco ad aprire %s. Fine
esecuzione",nomefile);
                exit(EXIT_FAILURE);
        }
}
void chiedi_nome(char *s)
{
        printf("Inserisci il nome del file: ");
        gets(s);
}
-- 
+------------------------------------+
  Daniele M.                       
  Lightwork Technologies, Inc.      
 
lwdev...@tiscalinet.it
 

                testo[k] = c; <<<< DA QUI IN POI SI BLOCCA IL COMPUTER
Dove punta testo? Se rispondi a questa domanda vedrai che il PC
non si blocca piu' .
Ciao
Igor Rossetti

 wrote:

mmmm...punta? k parte da zero ed ogni carattere viene inserito nella
posizione dell'array indicata.
-- 
Lightwork Technologies
lwdev...@tiscalinet.it

posizione dell'array indicata.
Si', Daniele.
PEro' l'array di 255 caratteri lo hai dichiarato con questo nome
       char nomefile[255];
in questa funzione invece:
void mostra_ed_indica(void)
{
        int c;
 
        while ((c = fgetc(fpin)) != EOF) {
                putchar(c);
                k++;       
                testo[k] = c; <<<< DA QUI IN POI SI BLOCCA IL COMPUTER
scrivi alll'indirizzo puntato da testo il valore contenuto nella
variabile c. Ma testo non sai dove punta, infatti l'hai solo
dichiarato, ma non l'hai fatto puntare ad un indirizzo valido.
Mi permetto (ma guarda che sono uno scarsone ) di modificare
leggermente il tuo codice, tieni presente che io non lo avrei scritto
cosi', cioe' con tre variabili globali (FILE *fpin etc...)
Difatti, tra l'altro, se char *testo fosse stata una variabile locale
il compilatore ti avrebbe segnalato subito l'errore con un
warning(almeno il mio me ne segnala di continuo :-P)
#include <iostream.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
void mostra_ed_indica(char  *risultato);
void apri_file(char *nomefile);
void chiedi_nome(char *s);
FILE *fpin;
char *testo;
int k;
int main()
{
        char nomefile[255];
 
        chiedi_nome(nomefile);
        apri_file(nomefile);
        mostra_ed_indica(nomefile);
}
void mostra_ed_indica(char  *risultato)
{
        int c;
 
   testo=risultato  ;  
    while ((c = fgetc(fpin)) != EOF) {
                putchar(c);
                k++;       
                testo++ = c; <<<< DA QUI IN POI SI BLOCCA IL COMPUTER


 warning(almeno il mio me ne segnala di continuo :-P)
Perdonami ma sono nuovo e di roba cosě non ne ho vista tanta.
SIncermanete una cosa del genere la risolvevo con cose del tipo a= a+b e
non con gli array di caratteri. Ma ovviamente ora siamo ad un'altro
livello. Devo abituarmi ancora... ma cavolo nel libro che sto leggendo
di roba tipo 'fatto puntare ad un indirizzo' non ne parla tanto. Grazie
ancora.
-- 
Lightwork Technologies
lwdev...@tiscalinet.it