J'essaie d'écrire un programme C sous linux qui a le sqrt de l'argument, voici le code :
#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;
}
Après avoir tapé mon entrée à l'invite "shell> " ;, gcc me donne l'erreur suivante :
Segmentation fault (core dumped)
Un défaut de segmentation signifie que vous avez essayé d'accéder à une mémoire à laquelle vous n'avez pas accès.
Le premier problème concerne les arguments de votre fonction main
. La fonction main
devrait être int main(int argc, char *argv[])
, et vous devriez vérifier que argc
vaut au moins 2 avant d'accéder à argv[1]
.
De plus, puisque vous passez un float
à printf
(qui, soit dit en passant, est converti en double
lorsqu'il est passé à printf
), vous devriez utiliser le spécificateur de format %f
. Le spécificateur de format %s
est destiné aux chaînes de caractères (tableaux de caractères terminés par '\0'
).