Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C] Lettura file e somma valori

    Salve, non riesco a capire come mai questo codice che qualche mese fa funzionava, adesso mi crea problemi ...
    L' obiettivo è leggere i valori in un file:
    1
    2
    3
    4
    5
    e restituire la somma... Dato che ci h operso una mattinata, qualcuno riesce a trovare l' inghippo? Se provo a stampare i valori letti mi ritornano questi VVoVe: :
    -1076069360
    -1076069356
    -1076069352
    -1076069348
    -1076069360
    Il codice è il seguente:
    codice:
    #include<stdlib.h>
    #include<stdio.h>
    
    int main( int argc, char * argv[] ) {
      int n=10;
      int vett[n];
      FILE *fd,*fdout;
      int i;
      int s, m;
    		/* apre il file */
      if ( argc != 3 ) {
    		printf("Utilizzo: %s file1 outfile\n",argv[0]);
    		return 1;
    	}
            
    	fd = fopen (argv[1], "r");
    	if ( fd == NULL) {
    		perror("Errore in apertura del file");
                    exit(1);
    	}
    	
    	fdout = fopen (argv[2], "w");
    
            for(i=0; i<n; i++){
            fscanf(fd, "%d", &vett[i]);
            printf("%d\n", &vett[i]);
            }
    
    		/* chiude il file */
      fclose(fd);
    		/* calcola la somma */
      s=0;
      for(i=0; i<n; i++)
        s+=vett[i];
    
    
    
    		/* scrive la somma */
      fprintf(fdout, "%d\n",s);
    
    		/* chiude il file */
      fclose(fdout);
    
      return 0;
    }
    Non capisco proprio dove sia l' errore.
    Grazie per l' aiuto.

  2. #2
    Già trovato. Che stupidata.

  3. #3
    scusa, sarà che sono noob io, ma non credo tu possa inizializzare in quel modo un array... mi riferisco a :
    int vett[n];
    a meno che non metti n come const int, o in #define n=...

    altrimenti dovresti dichiarare vett un puntatore, e poi malloccarlo quando conosci n... se ho sbagliato qualcosa in questo exploit dimmelo, che io amo apprendere cose nuove. ^^ grazie.
    Le mie idee voleranno e io vivrò anche se sarò sotto terra!

  4. #4
    Utente di HTML.it L'avatar di Metflar
    Registrato dal
    Apr 2007
    Messaggi
    790
    Originariamente inviato da EvilAngel
    scusa, sarà che sono noob io, ma non credo tu possa inizializzare in quel modo un array... mi riferisco a :
    int vett[n];
    a meno che non metti n come const int, o in #define n=...

    altrimenti dovresti dichiarare vett un puntatore, e poi malloccarlo quando conosci n... se ho sbagliato qualcosa in questo exploit dimmelo, che io amo apprendere cose nuove. ^^ grazie.
    il vettore è inizializzato bene...

  5. #5
    Stampa gli indirizzi dell'array e non il loro contenuto. Togli il &.


    Ciao
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  6. #6
    Originariamente inviato da Metflar
    il vettore è inizializzato bene...
    no, non è affatto inizializzato bene. qualsiasi guida consulto, e il mio prof, mi dicono che gli array non possono essere inizializzati, se non con variabili costanti per indice. servirebbe un const int o un define (meglio il define).

    Se così compila ugualmente non capisco proprio come mai, ma prova a dare ad esempio la possibilità di cambiare n dall'utente.. bam. segmentation fault.

    array dinamici (senza uso di const o define intendo) devono essere allocati dinamicamente in seguito ad una dichiarazione di puntatore ad int. (in questo caso)

    main (){
    ...
    int *vett;
    int n;

    printf("quanti elementi nel vettore??\n");
    scanf("%d", &n);
    vett = (int *) malloc (n*sizeof(int));
    ...
    }


    o se vuoi inizializzare ogni elemento di vett gia = 0 lo fai con calloc...

    con int vett [n]; che io sappia non dovrebbe funzionare a meno che n non sia costante.
    Le mie idee voleranno e io vivrò anche se sarò sotto terra!

  7. #7
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    In realtà mi sembra che l'ANSI C99 permetta inizializzazioni come quelle descritte.
    Comunque è sempre meglio evitare una sintassi del genere.

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.