Προς το περιεχόμενο

Σφάλμα κατάτμησης (segmentation fault)


miltostar

Προτεινόμενες αναρτήσεις

Καλησπέρα και καλή χρονιά! ´Εχω μια εργασία για τη σχολή και πρέπει να την παραδόσω μέχρι το βράδυ..Είναι μια άσκηση στη C η οποία θέλει να γράψουμε ένα πρόγραμμα το οποίο:

α) θα διαβάζει από το πληκτρολόγιο μια συμβολοσειρά (μαξ 80) και ένα χαρακτήρα.

β) θα υπολογίζει τη συχνότητα εμφάνισης του χαρακτήρα στη συμβολοσειρά και θα το εκτυπώνει.

γ) θα υπολογίζει και θα εκτυπώνει τη συμβολοσειρά ανάστροφα (π.χ. αν η συμβ. είναι τραπέζι θα την εκτυπώνει: ιζέπαρτ). Η αναστροφή της συμβολοσειράς θα γίνει με μια συνάρτηση που θα δέχεται την αρχική συμβολοσειρά και θα επιστρέφει την ανάστροφη με τη βοήθεια των δεικτών. Μέσα στη συνάρτηση η διαδικασία αναστροφής της συμβολοσειράς μπορείνα γίνει με οποιαδήποτε μέθοδο. Πριν από την εκτύπωση της ανάστροφης συμβολοσειράς θα εκτυπώνεται κ η αρχική. Οι εκτυπώσεις θα γίνουν στο κυρίως πρόγραμμα.

 

Το πρόβλημά μου είναι ότι α)δεν ξέρω αν όντως έχω κανει σωστά το πρόγραμμα (για το ερώτημα γ) και β) ότι όταν το τρέχω στο τέλος, όταν είναι να εκτυπώσει την ανεστραμμένη συμβολοσειρά μου βγάζει σφάλμα κατάτμησης. Παρακάτω σας παραθέτω τον κώδικα. Ευχαριστώ εκ των προτέρων!

 

#include <stdio.h>
#include <string.h>
char reverse (char b )
{
  char *ptr, *first;
  ptr=b;
  first=ptr;
  while (*ptr!='\0')
  {
    ptr++;
  }
  ptr--;
  while (ptr>=first)
  {
    b=*ptr;
    ptr--;
  }
   return (b ) ;
 
}

int main ()
{
char s[80], a, k;
int times=0, i;
printf (" Δώσε συμβολοσειρά. \n");
gets (s);
printf (" Δώσε γράμμα. \n");
scanf ("%c", &a);
for (i=0;i<=80;i++)
{
  if (s==a)
   
    times++;
}  
if (times==1)
 
  printf ("Το γράμμα %c εμφανίζεται %d φορά. \n",a,times);
else
  printf ("Το γράμμα %c εμφανίζεται %d φορές. \n",a,times);
printf ("Η αρχική συμβολοσειρά είναι %s. \n",s);
k=reverse(s);
printf ("Η ανεστραμμένη συμβολοσειρά είναι %s. \n",k);
}


 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...