PDA

View Full Version : [C]Automa riconoscitore


-Yara-
27-05-2005, 20:42
Salve a tutti
Qualcuno mi puo' aiutare con un programma?
Devo realizzare in c un programma che simuli il funzionamento di un automa riconoscitore che riconosce come sequenza di start 1111 e come sequenza di stop 1111.

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

void leggi_file(char*);
void riempi_file(int);
void stampa_stringa(char*,int);

FILE *pFile;

int main()
{
const int size=sizeof(int)*100;
char *stringa;
int fLenght,sLenght;
srand(time(NULL));
fLenght=20+rand()%size;
pFile=fopen("file.txt","w"); //apro il file in scrittura
riempi_file(fLenght); //riempio il file di 0 e 1
stringa=(char*)malloc((sizeof(char*))*fLenght);
leggi_file(stringa);
sLenght=strlen(stringa);
stampa_stringa(stringa,sLenght);
free(stringa);
getchar();
}

void riempi_file(int Lung)
{
int i,randd;
srand(time(NULL));
for(i=0;i<Lung;i++)
{
randd=rand()%7;
switch(randd)
{
case 0:fputs("000",pFile);break;
case 1:fputs("001",pFile);break;
case 2:fputs("010",pFile);break;
case 3:fputs("011",pFile);break;
case 4:fputs("100",pFile);break;
case 5:fputs("101",pFile);break;
case 6:fputs("110",pFile);break;
case 7:fputs("111",pFile);break;
default:perror("Errore rand");break;
}
}
}

void leggi_file(char* stringa)
{
do{
fgets(stringa,255,pFile);
}while(!feof(pFile));
fclose(pFile);
}

void stampa_stringa(char *stringa,int size)
{
int i;
for(i=0;i<size;i++)
printf("%c",stringa[i]);
}

In questo codice ho un problema nella lettura del file (leggi_file()). Qualcuno sa dirmi il perchè? (sembra che non trovi EOF).

cionci
28-05-2005, 01:54
fgets(stringa,255,pFile);

E se la stringa è più corta di 255 (fLength < 255) ??? Qui c'è un buffer overflow...