Προσπαθώ να γράψω ένα πρόγραμμα C στο linux που έχει sqrt του επιχειρήματος, Εδώ's ο κώδικας:
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
int main(char *argv[]){
float k;
printf("this is consumer\n");
k=(float)sqrt(atoi(argv[1]));
printf("%s\n",k);
return 0;
}
Αφού πληκτρολογήσω την είσοδό μου στο "shell> " prompt, ο gcc μου δίνει το ακόλουθο σφάλμα:
Segmentation fault (core dumped)
"Σφάλμα τμηματοποίησης" σημαίνει ότι προσπαθήσατε να αποκτήσετε πρόσβαση σε μνήμη στην οποία δεν έχετε πρόσβαση.
Το πρώτο πρόβλημα είναι με τα ορίσματα του main
. Η συνάρτηση main
θα έπρεπε να είναι int main(int argc, char *argv[])
, και θα πρέπει να ελέγξετε ότι το argc
είναι τουλάχιστον 2 πριν αποκτήσετε πρόσβαση στο argv[1]
.
Επίσης, δεδομένου ότι περνάτε ένα float
στην printf
(το οποίο, παρεμπιπτόντως, μετατρέπεται σε double
όταν περνάει στην printf
), θα πρέπει να χρησιμοποιήσετε τον προσδιοριστή μορφής %f
. Ο προσδιοριστής μορφής %s
είναι για συμβολοσειρές (πίνακες χαρακτήρων με τερματισμό '\0'
).