web-dev-qa-db-fra.com

quelle est la faute de segmentation (noyau déchargé)?

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)
84
user2929110

"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'-).

113
Eric Finn