#1 Le 22/04/2008, à 15:42
- WARDI
[Résolu] - code erreur 139 (programation C )
Bonjour,
j ' ai fait une fonction qui controle la saisie d'une chaine de caractaire, le compilateur n'a afficher aucun erreur , mais dans l'execution, au niveau de l'appelle de la fn controle_saisie, justement apres la saisie de la chaine, il m'affiche
Segmentation fault (core dumped)
program exited with code: 139
voici un quote de mon programe(test)
int controle_saisie(char S[]) {
char Tchar[60];="AZERTYUIOPQSDFGHJKLMWXCVBNazertyuiopqsdfghjklmwxcvbn";
int j;
int i=0;
int test=0;
while((test==0)||(S[i]!='\0')) {
test=1;
j=0;
while((test==1)||(Tchar[j]!='\0')) {
if(S[i]==Tchar[j]) {
test=0;
}
j++;
}
i++;
}
return test;
}
int main(void) {
char nom[50];
in test;
puts("\n\nDonner le nom d'employe");
do {
scanf("%s",nom);
test=controle_saisie(nom);
if(test==1) {
printf("Erreur,Le nom contient des caractaire spetiaux!!");
}
}while(test==1);
return 0;
}
pouvez vous me donner une explication s'il vous plaie
merci....
Hors ligne
#2 Le 22/04/2008, à 15:59
- Ultandir
Re : [Résolu] - code erreur 139 (programation C )
Bonjour,
J'ai une petite idée mais peut tu poster la liste entière des erreurs??
Fedora Cambridge i386
Zenwalk 5.2
-------------
Il y a 10 types de personnes : celles qui connaissent le binaire, et celles qui ne le connaissent pas.
Hors ligne
#3 Le 22/04/2008, à 16:14
- WARDI
Re : [Résolu] - code erreur 139 (programation C )
Bonjour,
J'ai une petite idée mais peut tu poster la liste entière des erreurs??
je compile avec Geany sous ubuntu 7.10,
le program s'execute normalement, apres la saisie du nom le programme m'affiche l'erreur
Segmentation fault (core dumped)
------------------------
(program exited with code: 139)
Hors ligne
#4 Le 22/04/2008, à 16:23
- Ultandir
Re : [Résolu] - code erreur 139 (programation C )
Comme le C est tr permissif, il y a beaucoup de choses qui semblent du pinaillement mais qui peuvent être importantes :
Ta variable "test", peut un etre boolean non? ( D'ailleur, ne serait-ce pas une erreur le
in test;
?? a la troisième ligne de ton main?
Au lieu de déclarer "test" 2 fois, déclare le en variable tout en haut de ton source, juste après tes includes.
Evite les tests comme
Tchar[j]!='\0'
Pour des tests de ce genre, soit utilise
strcmp( [i]chaine1, chaine2[/i] );
Ou joue plutot sur la taille du tableau
sizeof(Tchar);
( a vérifier dans le man pour utilisation bien spécifique pour toi )
Sinon j'ai un petit doute :
scanf("%s",nom);
Le scanf ne prend il pas un pointeur?.?.? ==> a vérifier
Fedora Cambridge i386
Zenwalk 5.2
-------------
Il y a 10 types de personnes : celles qui connaissent le binaire, et celles qui ne le connaissent pas.
Hors ligne
#5 Le 22/04/2008, à 16:36
- WARDI
Re : [Résolu] - code erreur 139 (programation C )
Ok,
d'abord in test etais une erreur de frappe que g cooriger dans mon programme qui comporte plus de 450 ligne et des disaines de test, ensuite , on pointe j'amai sur les chaine de caractaire dans scanf,
bon, une autre chose, mon but n'est pas de comparer 2 chaine, mais c de parcourir les deux chaine par caractaire est comparer les caractaire, donc j'utilise pas strcmp...
le caractaire '/0' ne pe pas etre le probleme aussi, j'ai deja essayer d'autre chose(comme j<strlen(Tchar) )
y a t'il d'autre proposition svp? je suis bloque!!!
merci....
Hors ligne
#6 Le 22/04/2008, à 16:55
- Seren
Re : [Résolu] - code erreur 139 (programation C )
char Tchar[60];="AZERTYUIOPQSDFGHJKLMWXCVBNazertyuiopqsdfghjklmwxcvbn";
Il y a un point virgule en trop après ton crochet mais c'est certainement pas ton problème.
En regardant rapidement, je vois pas ton problème, mais le segmentation fault c'est que ta condition d'arrêt ne marche pas pour une raison ou une autre, donc en gros tu incrémentes i++ et j++ éternellement, jusqu'à ce que ton système voit que t'essayes d'accéder à une zone mémoire interdite, et donc ferme ton programme pour éviter de crasher tout le système.
Par contre, pour trouver ton problème tu peux mettre des printf dans les boucles while de ta fonction de test.
Par exemple printf(" i=%d j=%d T[j]= %c \n", i, j, T[j]);
ça te permettra de voir ce qui se passe, et où ça s'affole. Ensuite en fonction tu peux mettre plus ou moins d'infos dans ton printf.
Dernière modification par Seren (Le 22/04/2008, à 17:03)
"I am not young enough to know everything". Oscar Wilde
Hors ligne
#7 Le 22/04/2008, à 17:07
- WARDI
Re : [Résolu] - code erreur 139 (programation C )
Merci bien Seren:):)
voici exactement le problem --> " || " =>je l'ai remplacer par un " && ",
bon c'etais une faute grave, que j'ai pas remarque,
Merci a tou;
PROBLEME RESOLUT
Hors ligne
#8 Le 22/04/2008, à 20:11
- Seren
Re : [Résolu] - code erreur 139 (programation C )
Bon maintenant que t'as t'as trouvé je peux te dire que y a un moyen plus simple qui inclus pas d'utiliser deux boucles.
Et à mon avis c'est le but de ton exo. En gros, si tu regardes une table ascii, tu peux voir que de 'A' à 'Z' et de 'a' à 'z' les caractères se suivent, donc plutôt que de faire deux boucles imbriquées, ce qui est assez complexe tu peux simplement tester.
Pour tout i
if( ((nom[i] >= 'A') && (nom[i] <= 'Z')) || ((nom[i] >= 'a') && (nom[i] <= 'z')) )
return OK;
else
return ERROR;
"I am not young enough to know everything". Oscar Wilde
Hors ligne
#9 Le 22/04/2008, à 20:35
- nicolas.sitbon
Re : [Résolu] - code erreur 139 (programation C )
Bon maintenant que t'as t'as trouvé je peux te dire que y a un moyen plus simple qui inclus pas d'utiliser deux boucles.
Et à mon avis c'est le but de ton exo. En gros, si tu regardes une table ascii, tu peux voir que de 'A' à 'Z' et de 'a' à 'z' les caractères se suivent, donc plutôt que de faire deux boucles imbriquées, ce qui est assez complexe tu peux simplement tester.
Pour tout i
if( ((nom >= 'A') && (nom[i] <= 'Z')) || ((nom[i] >= 'a') && (nom[i] <= 'z')) )
return OK;
else
return ERROR;
Pourquoi réinventer la roue?
Personne ne connait [i]isalpha() (ctype.h) ?
Hors ligne