Esercizio puntatori e lettura file

di il
9 risposte

Esercizio puntatori e lettura file

Buonasera a tutti,

ho bisogno del Vostro aiuto per capire come mai non riesco a stampare a video il contenuto letto nel file "prova.txt".
Purtroppo sto avendo un po' di difficoltà nell''utilizzo dei puntatori nonostante abbia ben chiaro cosa siano, ma non riesco a capire come/quando utilizzarli e sfruttarli.
Posto di seguito il codice utilizzando i tag richiesti dal forum....grazie per il Vostro aiuto.

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

#define maxr 10
#define maxc 20

char matrice[maxr][maxc];
char *v = &matrice[maxr][maxc];
int count=0, n=0, i=0, j=0;

//Funzione prototipo
int dimensione_file(char *v);

int main()
{
    count = dimensione_file(v);
    printf("Dimensione del file: %d\n",count);

    v = malloc(sizeof(count));

    for (i=0;i<count;i++)
    {
        printf("%s\n",&v[i]);
    }
    free(v);
    return 0;
}
//Funzione per conoscere la dimensione del file
int dimensione_file (char *v)
{
    FILE *p;
    p=fopen("prova.txt", "r");
    i=0;
    while (!feof(p))
    {
        fscanf(p,"%s",&v[i]);
        i++;
    }
    fclose(p);
    return i;
}

9 Risposte

  • Re: Esercizio puntatori e lettura file

    Ma che intendi fare con

    v = malloc(sizeof(count));

    ??

    Non ha nessun senso.
  • Re: Esercizio puntatori e lettura file

    Premetto che non sono un esperto ma perche' dichiaranti un array bidimensionale per poi non usarlo(char matrice[maxr][maxc];
    )?
    sizeof(count)=4 sizeof ritorna la dimensione di count che e' un intero

    edit
    chiedo scusa non avevo visto la risposta di oregon
  • Re: Esercizio puntatori e lettura file

    E perché ti scusi ... ogni risposta è un elemento in più utile alla soluzione ....
  • Re: Esercizio puntatori e lettura file

    oregon ha scritto:


    E perché ti scusi ... ogni risposta è un elemento in più utile alla soluzione ....
    ridondanza
  • Re: Esercizio puntatori e lettura file

    Premetto che non sono un esperto ma perche' dichiaranti un array bidimensionale per poi non usarlo(char matrice[maxr][maxc];
    )?
    sizeof(count)=4 sizeof ritorna la dimensione di count che e' un intero

    edit
    chiedo scusa non avevo visto la risposta di oregon
    Inizialmente avevo fatto funzionare il programma senza puntatori dichiarando una matrice bidimensionale.
    Ma che intendi fare con

    v = malloc(sizeof(count));

    ??

    Non ha nessun senso.
    In teoria la malloc deve servirmi per chiedere spazio in memoria secondo il valore recuperato dalla variabile i della funzione dimensione e poter salvare quello che viene letto per poi stamparlo a video.
  • Re: Esercizio puntatori e lettura file

    Se fai stampare sizeof(count) vedrai che stampa sempre 4 a prescindere dal valore che assume count
  • Re: Esercizio puntatori e lettura file

    Se fai stampare sizeof(count) vedrai che stampa sempre 4 a prescindere dal valore che assume count
    Ti assicuro che a seconda di quante parole inserisco nel file, separate dalla spazio oppure a capo, mi conta esattamente le parole inserite e il valore cambia sempre.

    Ho creato un file .txt con all'interno le seguenti parole
    ...
    albero
    casa
    mela
    ...
    Mi conta correttamente le stringhe ma non le riesco a stampare a video. Mi stampa dei caratteri casuali. Vorrei capire cosa sbaglio nella stampa.
    Grazie
  • Re: Esercizio puntatori e lettura file

    Ste866 ha scritto:


    Se fai stampare sizeof(count) vedrai che stampa sempre 4 a prescindere dal valore che assume count
    Ti assicuro che a seconda di quante parole inserisco nel file, separate dalla spazio oppure a capo, mi conta esattamente le parole inserite e il valore cambia sempre.

    Ho creato un file .txt con all'interno le seguenti parole
    ...
    albero
    casa
    mela
    ...
    Mi conta correttamente le stringhe ma non le riesco a stampare a video. Mi stampa dei caratteri casuali. Vorrei capire cosa sbaglio nella stampa.
    Grazie
    printf("count %d",sizeof(count))
    
    cambia sempre valore?

    al di la di questo come ti faceva notare giustamente oregon tu prendi un puntatore di char v gli assegni l'indirizzo della matrice e lo passi alla funzione dimensione_file e poi chiami una malloc su v che allochera' 4 bytes (sempre a prescindere dal valore di count) successivamente gli fai stampare v che non punta alla matrice originale ma ad una nuova area di memoria allocata dalla malloc.
  • Re: Esercizio puntatori e lettura file

    Come l'ho scritto io nel codice si...
    printf("Dimensione del file: %d\n",count);
    Perchè io stampo il valore che viene generato dalla mia funzione, ed è un'altra cosa...non ci siamo capiti bene...invece tu intendevi stampare il valore di sizeof(count). Hai ragione te!
Devi accedere o registrarti per scrivere nel forum
9 risposte