Program wczytujący plik pgm.

0

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;
}
0

Hej,
ja stworzyłbym taką strukturę:


typedef struct tab_obraz{
    int wymX;
    int wymY;
    int skala;
    int **obraz;
    char **komentarz;
} OBRAZ;

Dzięki temu podobnie jak mallociem na wskaźnikach deklarujesz rozmiar tablicy "obraz" (u mnie),
tak samo zliczając liczbę linii zaczynających się od "#" zadeklarujesz sobie rozsądną tablice komentarzy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1