File descriptor

di Paolovox il
6 risposte
Perchè all'interno del for dopo la comparazione delle stringhe, newLines(fd) che ritorna il numero di '\n' di un file, ritorna un numero casuale? E' come se il fd non puntasse più al file aperto. Se non lo faccio precedere dalla funzione strcmp funziona normalmente oppure se faccio l'open nel for.
Allegati:
14867_f3cfcf78eda2f093dba7842cee27d054.png
14867_f3cfcf78eda2f093dba7842cee27d054.png

6 Risposte

  • Mostra anche il codice della funzione ma qui nel forum per poterlo provare ... non con una immagine.
  • =====MAIN=====
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <errno.h>
    #include "newLines.h"
    
    int main(int argc, char *argv[]){
      FILE *fd;
      int i;
      fd = fopen(argv[argc-1],"r");
     
      if(fd==NULL || argc<2){
        printf("FILE NOT FOUND");
        exit(1);
      }
      for(i=1;i<argc;i++){
         if(strcmp(argv[i],"w")==0)  { printf("%d\n",newLines(fd));}
      }
      printf("OK\n");
      exit(0);
    
    }
    
    =====NEWLINES=====
    
    #include <stdio.h>
    #include <stdlib.h>
    #include "newLines.h"
    
    int newLines(FILE *fd){
      int count;
      while(1){
        if(fgetc(fd)=='\n')
          count++;
        if(feof(fd)) break;
      }
      return count;
     
    }
    

    =====MAKEFILE=====
    
    CC=gcc
    CFLAGS=-c -Wall -Wextra
    
    all : wc
    
    wc : main.o newLines.o
    	$(CC) main.o newLines.o -o wc
    
    main.o : main.c 
    	$(CC) $(CFLAGS) main.c	
    
    newLines.o : newLines.c
    	$(CC) $(CFLAGS) newLines.c
    
    
  • Ma la variabile count non è inizializzata ...
  • È proprio quello, mo funziona. Non riesco a capire perchè al di fuori del for la inizializza comunque a 0. (caso fortuito dato che in precedenza il banco di memoria di quella variabile non sarà stato utilizzato).
    Quindi una variabile non inizializzata potrebbe contenere un valore random.
  • Paolovox ha scritto:


    Quindi una variabile non inizializzata potrebbe contenere un valore random.
    E' una delle prime nozioni che si impara ...
  • Chiedo venia!!! (in Java o Python l'avrebbe inizializzata a 0, in assembly probabilmente a 0x7fffeffc)
Devi accedere o registrarti per scrivere nel forum
6 risposte