Witam, miałem za zadanie napisać program który miał za zadanie odczytać imiona z pliku, znaleźć imię, które w porządku leksykalnograficznym jest pierwsze, imię, które powinno być ostatnie, a potem posortować te listę. Na końcu powinien wypisać do innego pliku imię pierwsze, ostatnie oraz posortowaną listę. Niestety natknąłem się na problem i nie umiem go rozwiązać. Chodzi o błąd "Naruszenie ochrony pamięci (zrzut pamięci)". Wiem, że przy takim błędzie najczęściej winne są wskaźniki ale nie wiem na czym mógł polegać błąd, bo wydaje mi się, żebym wyszedł poza tablicę. Z góry dziękuje za pomoc. Oto kod:
#include <stdio.h>
#include <string.h>
void sortuj(char Imie[], int index){
char temp[20];
int i, j;
for(i=0; i<index; i++){
for(j=0; j<index-i-1; j++){
if(strcmp(Imie[j], Imie[j+1]) > 0){
//Zamiana miejscami
strcpy(temp, Imie[j]);
strcpy(Imie[j], Imie[j+1]);
strcpy(Imie[j+1], temp);
}
}
}
}
void minmax( char Imie[], int index, char *first[], char *last[]){
*first = Imie[0];
*last = Imie[0];
int i;
for(i=0; i<index; i++){
if(strcmp(Imie[i], *first) > 0) *first = Imie[i];
}
for(i=0; i<index; i++){
if(strcmp(*first, Imie[i]) > 0) *last = Imie[i];
}
}
int main (int argc, char *argv[]){
FILE *fin, *fout;
fin = fopen(argv[1], "r");
char imie[20];
char Imie[20];
int i,j,index;
char first[20], last[20];
index = 0;
while( ((fscanf(fin, "%s", &imie))==1) && (index<20) ){
strcpy(Imie[index], imie);
index++;
}
fclose(fin);
// MIN MAX
minmax(Imie, index, &first, &last);
//SORTOWANIE
sortuj(&Imie, index);
//DO PLIKU
fout = fopen(argv[2], "w");
for(j=0; j<index; j++){
fprintf(fout, "%s \n", Imie[j]);
}
fprintf(fout, "Min: %s, Max: %s \n", first, last);
fclose(fout);
return 0;
}