Probleme erreur

Résolu/Fermé
anthony - 24 août 2009 à 18:04
 anthony - 24 août 2009 à 20:08
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 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
24 août 2009 à 18:14
Il te manque un else à la fin rechercheCaractere, on attend un résultat DANS TOUS LES CAS !
0
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 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
24 août 2009 à 18:50
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
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 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
24 août 2009 à 19:35
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
j'ai une question chaine + i equivaut a chaine[i] ou je suis hors sujet
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
24 août 2009 à 19:56
chaine[i] est un caractère, chaine+i est un pointeur sur le caractère
en fait tu as : chaine[i] = *(chaine+i)
0
ah ok ben merci de ton aide
0