Witam. Mam do napisania program, który sortuje tablicę studentów wg ocen. W poniższym kodzie źródłowym wskaźniki char* są czymś, czego ominąć nie mogę.
#include <stdio.h>
#include <stdlib.h>
struct student {
int ocena;
char* imie;
char* nazwisko;
};
void sortuj(struct student s[], int n);
int main(){
int i;
int n = 3;
struct student s[n];
for( i = 0; i < n; i++){
printf("Podaj ocene: \n");
scanf("%d", &s[i].ocena);
printf("Podaj imie: \n");
scanf("%s",&s[i].imie);
printf("Podaj nazwisko: \n");
scanf("%s",&s[i].nazwisko);
}
sortuj(s, n);
for( i = 0; i < n; i++){
printf("%d |", s[i].ocena);
printf("%s |", *s[i].imie);
}
return 0;
}
void sortuj(struct student s[], int n){
int i, j, tmp;
for( i = 0; i < n; i++){
for( j = 0; j < n; j++){
if(s[j].ocena > s[j+1].ocena){
tmp = s[j].ocena;
s[j].ocena = s[j+1].ocena;
s[j+1].ocena = tmp;
}
}
}
}
Problem jest taki, że o ile same oceny mi sortuje i wyświetla, to już z imionami i nazwiskami jest problem, program się krzaczy, wyświetla naruszenie ochrony pamięci.