Eίναι ένα πολύ απλό πρόγραμμα που διαβάζει ένα txt αρχείο το περνάει σε έναν pointer και στη συνέχεια τον κάνει save σε ένα άλλο txt αρχείο.
Το πρόβλημα το έχω εντωπίσει στην mapload και συγκεκριμένα όταν παει να φορτώσει τον πίνακα στον array.
Eίμαι 99% σίγουρος ότι δεν βγαίνει έξω από τα άκρα.
- Spoiler: εμφάνιση/απόκρυψη
- [code]#include <stdio.h> #include <stdlib.h> int countlines=0, max=0; main() { FILE *map; int i=0,counter=0; char *storE=NULL; if ((map = fopen("px1", "r"))==NULL){ printf("Cannot open map file!\n Press X to exit and anything else to repeat with a new path for the map"); } else { counts(map, &countlines, &max); printf("grammes------>%d\nstilles------> %d\n", countlines,max); getchar(); storE=malloc((max)*(countlines)*sizeof(char)); if (storE==NULL){ printf("malloc function failed"); exit(0); }; mapload("px1", &storE,max , countlines); mapsave("pr2.c", &storE,max , countlines); }; return 0; }; counts(FILE *map,int *countlines,int *max){ char tmp1; int countcolumns=0; while (fscanf(map, "%c", &tmp1)!=EOF){ if (tmp1!='\n'){ countcolumns+=1; printf("%c %d\n", tmp1, countcolumns); } else if (tmp1=='\n'){ countcolumns+=1; *countlines+=1; printf("%c %d %d\n", tmp1, countcolumns, *countlines); if (countcolumns>*max) *max=countcolumns; countcolumns=0; }; }; printf("%d %d\n", *countlines,*max); rewind(map); clearerr(map); }; int mapload(char *filename, char *storE,int max,int countlines){ FILE *map; int i=0,count=0, counter=0, cHECK=0, mpourda=0; char tmp='0',check='r'; if ((map = fopen(filename, "r"))==NULL){ printf("Cannot open map file!\n Press X to exit and anything else to repeat with a new path for the map"); scanf("%c", &check); } else { /*while ((fscanf(map,"%c", &tmp)==1)){ switch (tmp) { case '\n' : if(counter!=(max-1)){ for(;counter<max-1;counter++){ printf("(%d,%d)",i,(counter)); storE[loc(i,counter)]='*'; printf("---> %c\n", storE[loc(i,counter)]); }; storE[loc(i,counter)]='\n'; printf("(%d,%d)",i,(counter)); printf("---> %c\n", storE[loc(i,counter)]); } else { storE[loc(i,counter)]='\n'; printf("(%d,%d)",i,(counter)); printf("---> %c\n", storE[loc(i,counter)]); }; cHECK=0; i+=1; counter=0; break; case '*' : if (!cHECK) cHECK=1; storE[loc(i,counter)]='*'; printf("(%d,%d)",i,(counter)); printf("---> %c\n", storE[loc(i,counter)]); counter+=1; break; default : if (!cHECK){ storE[loc(i,counter)]='*'; printf("(%d,%d)",i,(counter)); printf("---> %c\n", storE[loc(i,counter)]); } else { storE[loc(i,counter)]=tmp; printf("(%d,%d)",i,(counter)); printf("---> %c\n", storE[loc(i,counter)]); }; counter+=1; break; };*/ for(counter=0;fscanf(map,"%c", &tmp)!=EOF;counter++){ storE[counter]=tmp; printf("(%d,%c)",i,(counter)); printf("---> %c\n", storE[counter]); }; }; /*for(i-=1;counter<(max-1);counter++){ *(storE+loc(i,counter))='*'; printf("(%d,%d)",i,(counter)); printf("---> %c\n", storE[loc(i,counter)]); }; *(storE+loc(i,counter))='\n'; printf("(%d,%d)",i,(counter)); printf("---> %c\n", storE[loc(i,counter)]); printf("SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS\n");*/ /*for(i=0;i<(countlines);i++){ for(counter=0;counter<(max);counter++){ printf("%c", storE[loc(i,counter)]); }; };*/ return 0; }; mapsave(char *filename, char *storE,int max, int countlines){ FILE *map; int i=0, counter=0; if ((map=fopen(filename , "w"))==NULL){ printf(" Could not write map file!\n"); exit(0); } else { for(i=0;i<(countlines);i++) for(counter=0;counter<(max);counter++){ fprintf(map, "%c", storE[loc(i,counter)]); printf("%c", storE[loc(i,counter)]); }; }; rewind(map); fclose(map); }; int loc(int i, int j){ return (i*max+j); } [/code]