J'essaie d'écrire un programme C sous Linux qui, après avoir trouvé 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 dans l'invite "Shell>", gcc me donne l'erreur suivante:
Segmentation fault (core dumped)
"Erreur 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 vos arguments de main
. La fonction main
doit être int main(int argc, char *argv[])
et vous devez vérifier que argc
vaut au moins 2 avant d'accéder à argv[1]
.
De plus, puisque vous passez de float
à printf
(qui, en passant, est converti en double
en passant à printf
), vous devez utiliser le %f
spécificateur de format. Le spécificateur de format %s
concerne les chaînes (tableaux de caractères terminés par '\0'
-).