Program ma wczytywać plik pgm do struktury. Jednak jest jeden haczyk komentarz zaczynający się '#' może być w każdej linijce w pliku. Mój program działa na małych plikach jednak przy większych plikach brakuje miejsca w tablicy string i nie wiem dlaczego tak sie dzieje. Oto kod pliku z funkcją:
#include <stdio.h>
#include <stdlib.h>
#include "pgm.h"
int wczytywanieDanych(struct dane *s)
{
char string[20000];
int kosz[100];
int temp1=0,temp;
int szerokosc, wysokosc, odcien;
int liczbaWierszy=0;
int i=0,j,k=0,l=0,z=0,m=0;
int typPliku=0;
size_t mem_size;
FILE *plik;
if((plik=fopen("angel.pgm", "r"))!=NULL)
{
while(fgets(string,19999,plik)!=NULL)
{
if(string[0]=='#')
{
kosz[i]=1;
i++;
}
if((string[0]=='P') && (string[1]=='2'))
{
typPliku=1;
kosz[i]=1;
i++;
}
if(string[0]!='#' && string[0]!='P')
{
kosz[i]=0;
i++;
}
liczbaWierszy++;
free(string);
}
if(typPliku==1)
{
rewind(plik);
for(j=0;j<liczbaWierszy;j++)
{
if(kosz[j]==1)
{
fgets(string,19999,plik);
}
if(kosz[j]==0 && z==0)
{
fscanf(plik,"%d %d",&szerokosc,&wysokosc);
s->pixele=(int**)malloc(szerokosc*sizeof(int));
for(k=0;k<szerokosc;k++)
{
s->pixele[k]=(int*)malloc(wysokosc*sizeof(int));
}
z=1;
}
if(kosz[j]==0 && z==2)
{
while(fscanf(plik,"%d",&temp)==1)
{
s->pixele[l][m]=temp;
l++;
if(l==szerokosc)
{
m++;
l=0;
}
}
}
if(kosz[j]==0 && z==1 && fscanf(plik,"%d",&temp)==1)
{
odcien=temp;
z=2;
}
}
}
}
return 1;
}