Probleme erreur

Résolu
anthony -  
 anthony -
Bonjour,
voia je suis en train d'essayer de reproduire une fonction qui s'apelle strchr en C
voila le code:

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

char* rechercheCaractere(const char* chaine, int caractereARechercher);

int main(int argc, char *argv[])
{
    char lettre[100] = "Salut je suis anthony", *fonction = NULL;

    fonction = rechercheCaractere(lettre, 'j');

    if(fonction != NULL)
    {
        printf("voici la fin du texte de la premiere lettre rechercher\n %s\n", fonction);
    }
    else
    {
        printf("dsl le caractere rechercher est inexistant \n");
    }

    return 0;
}



char* rechercheCaractere(const char* chaine, int caractereARechercher)
{
    int i;

    for(i = 0; caractereARechercher != chaine[i]; i++)
    {
    if(caractereARechercher == chaine[i])
        {
           return (char*) chaine;
        }
        else if (chaine[i] == '\0')
        {
            return NULL;
        }
    }
}


mais j'ai une erreur que je ne comprend pas

la voici:
/home/user/projet/main.c||In function ‘rechercheCaractere’:|
/home/user/projet/main.c|42|attention : control reaches end of non-void function|
||=== Build finished: 1 errors, 0 warnings ===|


et il voici ce qu'il m'affiche dans ma console:
[user@guillemot Debug]$ ./projet 
voici la fin du texte de la premiere lettre rechercher
 H:&#65533;&#65533;&#65533;&#65533;&#1079;&#65533;\&#65533;&#65533; &#65533;H:&#65533;&#65533;&#65533;&#65533;&#1079;
[user@guillemot Debug]$ 

sur ma console les caractere s'affiche differement sa m'affiche pas ce genre de truc ;� mais sa m'affiche des point d'interrogation entourer par un rond blanc alors que sa devrait afficher ma chaine

8 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
Il te manque un else à la fin rechercheCaractere, on attend un résultat DANS TOUS LES CAS !
0
anthony
 
oui mais si je met un else je doit mettre quoi a l'interieur de else je ne vais pas mettre un return NULL je l'ai deja mit dans le else if sa n'a aucune utilitée
0
KX Messages postés 19031 Statut Modérateur 3 020
 
J'ai compris ce que tu as voulu faire, mais ce n'étais pas très propre...
char* rechercheCaractere(const char* chaine, int caractereARechercher)
{
    int i;

    for (i=0; chaine[i] != '\0'; i++) 
    {
        if (chaine[i] == caractereARechercher)
             return (char*) chaine; // es-tu sûr que ce soit chaine ici ?
    }

    return NULL; // dans le cas où le caractère n'apparaisse jamais
}
0
anthony
 
ben en faite moi j'ai un doute je crois que je doit retourner chaine[i] mais dans le prototype il dise qu'on doit retourner une pointeur et un gars ma dit que chaine est un pointeur alors que chaine[i] n'est pas un pointeur donc je retourne chaine je vois ce ue je doit retourner d'autre
0

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

Posez votre question
KX Messages postés 19031 Statut Modérateur 3 020
 
Même si ça peut paraître étrange, tu peux retourner un pointeur sur un caractère.
Ça te permet de savoir où est situé ce caractère en mémoire, et d'afficher tous les caractères qui suivent...

En réalité chaine pointe sur chaine[0], donc tu peux faire revenir le pointeur de chaine[i] en utilisant chaine+i.
Remarque : chaine étant déclaré constante tu devras encore utiliser (char*)

Ainsi avec return (char*) chaine+i; tu obtiendras "je suis Anthony".
0
anthony
 
j'ai une question chaine + i equivaut a chaine[i] ou je suis hors sujet
0
KX Messages postés 19031 Statut Modérateur 3 020
 
chaine[i] est un caractère, chaine+i est un pointeur sur le caractère
en fait tu as : chaine[i] = *(chaine+i)
0
anthony
 
ah ok ben merci de ton aide
0