Încerc să scriu un program C în linux care să aibă sqrt al argumentului, Iată codul:
#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;
}
După ce am tastat intrarea mea la "shell> " prompt, gcc îmi dă următoarea eroare:
Segmentation fault (core dumped)
"Segmentation fault" înseamnă că ați încercat să accesați o memorie la care nu aveți acces.
Prima problemă este legată de argumentele dvs. din main
. Funcția main
ar trebui să fie int main(int argc, char *argv[])
și ar trebui să verificați dacă argc
este cel puțin 2 înainte de a accesa argv[1]
.
De asemenea, din moment ce treceți un float
către printf
(care, apropo, este convertit în double
atunci când este trecut la printf
), ar trebui să folosiți specificatorul de format %f
. Specificatorul de format %s
este pentru șiruri de caractere (matrice de caractere terminate cu '\0'
).