Erreur de segmentation(sic)

Résolu
scheme Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   -  
scheme Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, le programme suivant compile bien mais donne une erreur d'exécution quand je veut le lancer.

#include <stdio.h>
#include <stdlib.h>

char* func_pointeur()
{
char *pointeur= "okay";
return pointeur;
}

int main()
{
char *pointeur=NULL;
func_pointeur();
printf("%s\n", pointeur);
return 0;
}

Je sais que ça signifie que j'essaie d'accéder à une case mémoire qui ne m'est pas réservée, d'où l'arrêt du programme et l'apparition du message d'erreur. Je pense que vous avez compris ce que je veux faire dans ce programme, pourriez-vous m'indiquer quelle est mon erreur et comment la corriger? Merci d'avance :)

10 réponses

chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378
 
Ben sur mon poste j'ai pas d'erreur.....avec n'importe quelle lettre....
#include <stdio.h> 
#include <stdlib.h> 
char* chercherCaractere(char* chaine, char caractereArechercher) 
{ 
while((caractereArechercher != *chaine) && (*chaine != '\0')) 
	{ 
	chaine++; 
	} 
if(*chaine==caractereArechercher) return chaine;
else return NULL; 
} 
int main() 
{ 
char* pointeur; 
char* chaine="Owie jai réussi"; 
if ((pointeur=chercherCaractere(chaine, 'z'))==NULL) printf ("pas d'occurence");
else printf("%s\n", pointeur); 
return 0; 
} 
1
chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378
 
Salut,
Je pense qu'en faisant cela ca devrait suffir!!!
int main()
{
char *pointeur=NULL;
pointeur=func_pointeur();
printf("%s\n", pointeur);
return 0;
}
@+
0
scheme Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   3
 
Effectivement, merci beaucoup!
0
scheme Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   3
 
Dans mon code principal ça ne fonctionne toujours pas, je ne comprend pas pourquoi =(

#include <stdio.h>
#include <stdlib.h>

char* chercherCaractere(const char* chaine, int caractereArechercher)
{
long i= 0;
char* pointeur= NULL;

while(caractereArechercher != chaine[i] && chaine[i] != '\0')
{
i++;
}
if(chaine[i]==caractereArechercher)
{
pointeur=&chaine[i];
}
return pointeur;
}

int main()
{
char* pointeur=NULL;
char chaine[]="Owie j'ai réussi =)";
pointeur=chercherCaractere(chaine, 'z');
printf("%s\n", pointeur);
return 0;
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378
 
Salut,
Je sais pas trop ce que tu veux retourner...là ca te retourne la fin de la chaine trouvée....
#include <stdio.h>
#include <stdlib.h>

char* chercherCaractere(char* chaine, char caractereArechercher)
{
while((caractereArechercher != *chaine) && (*chaine != '\0'))
{
chaine++;
}
if(*chaine==caractereArechercher) return chaine;
}
int main()
{
char* pointeur;
char* chaine="Owie jai réussi";
pointeur=chercherCaractere(chaine, 'u');
printf("%s\n", pointeur);
return 0;
}
0
scheme Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   3
 
La fonction renvoie un pointeur vers le premier caractère qu'elle a trouvé, c'est-à-dire qu'elle renvoie l'adresse de ce caractère dans la mémoire. Elle renvoie NULL si elle n'a rien trouvé.
0
chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378
 
Salut,
Dans ce cas, le code precedent fait l'affaire!!
@+
0
scheme Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   3
 
Excuse moi mais si on envoie à ta fonction (chaine, 'z'), ça affiche erreur de segmentation :s
0
chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378
 
Salut,
Rajoute dans le if:
if(*chaine==caractereArechercher) return chaine; else return NULL;
je pense ca devrait resoudre le prb...

0
scheme Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   3
 
L'erreur de segmentation est toujours présente :X

Je reposte le code:

#include <stdio.h>
#include <stdlib.h>

char* chercherCaractere(char* chaine, char caractereArechercher)
{
while((caractereArechercher != *chaine) && (*chaine != '\0'))
{
chaine++;
}
if(*chaine==caractereArechercher)
{
return chaine;
}
else
{
return NULL;
}
}

int main()
{
char* pointeur;
char* chaine="Owie jai réussi";
pointeur=chercherCaractere(chaine, 'z');
printf("%s\n", pointeur);
return 0;
}

Merci de m'aider =)
0
scheme Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   3
 
Merci ça marche =)

Je viens de me rendre compte qu'on ne peut pas faire un printf sur un pointeur qui vaut NULL^^
0