Fonction erreur

logant83 Messages postés 90 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 6 mars 2007 - 1 mai 2006 à 17:09
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 - 1 mai 2006 à 18:31
Bonsoir, voila alors j'essay de faire retourner a ma fonction 'char *splitnick(char *mot)"' une valeur char (logique je sais) mais voila dés que je compile j'ai le message '[Warning] address of local variable `nick' returned '

Alors voila mon code:

char *splitnick(char *mot)
{
char nick[1000];
int x = 0;
int y = 0;
char autre[1];
while(mot[x] != '\0')
{
autre[y]=mot[x];
if (strcmp(autre,"\") == 0) { strncat(nick, "\\\",2); x++; continue; }
strncat(nick, autre,1);
x++;
}
return nick;
}

Vous avez une idée?

11 réponses

Pitchikwow Messages postés 10 Date d'inscription samedi 1 février 2003 Statut Membre Dernière intervention 1 mai 2006
1 mai 2006 à 17:54
Salut,
Tu essais de retourner un tableau, alors que ta fonction retourne un char*.
Un truc pas très génial. Converti ton tableau en char * ou utilise ça "return &nick[0];"
Tu vas compiler sans problème. La meilleur solution est la suivante.
char *splitnick(char *mot)
{
            char nick[1000];
            char* chaineARetourner;
            //Initialise ma variable à l'adresse de base du tableau
            chaineARetourner = &nick[0];
            
            int x = 0;
            int y = 0;
            char autre[1];
            while(mot[x] != '\0')
{
               autre[y]=mot[x];
               if (strcmp(autre,"\") == 0) {  strncat(nick, "\\\",2); x++;  continue;  }
               strncat(nick, autre,1);
               x++;
            }
            return chaineARetourner ;
}
Voila a+.

 
   
   
0
Pitchikwow Messages postés 10 Date d'inscription samedi 1 février 2003 Statut Membre Dernière intervention 1 mai 2006
1 mai 2006 à 18:03
Resalut,
J'oubliais ton programme est bugger.
La solution donnée est juste mais ne résout pas ton prog.
a+
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
1 mai 2006 à 18:12
Ou alors déclare nick en static :
static char nick[1000];
Je pense tout de même que la solution de pitchikwow est meilleure.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0
logant83 Messages postés 90 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 6 mars 2007
1 mai 2006 à 18:14
jvien juste de trouver la solution, le seul probléme que j'avai c'est que javais déclaré ma variable a retourner dans la fonction donc ct une valeur local mais en la déclarant a l'extérieur de la fonction , j'en est fait une valeur global, donc plus aucun probléme a la compilation.

merci quand meme.
0

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

Posez votre question
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
1 mai 2006 à 18:15
Pitchikwow => ton truc, c'est comme le sien. C'est plantage ...


Vous retournez l'adresse d'une variable locale ... qui donc est
supprimée a la fin de la fonction. Donc votre adresse elle pointe sur
rien du tout.


Faut pas faire un schéma de fonction, mais de procédure.

void splitnick(char *mot, char *target);


Tu alloues la place nécessaire avant l'appel de la fonction et tu passes le buffer en argument.

Soit ca, soit tu utilises l'allocation dynamique. Mais, c'est pas terrible car faudra penser a libérer l'espace occupé.
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
1 mai 2006 à 18:17
Ou tu fais une solution dégueulasse avec une variable globale...
0
logant83 Messages postés 90 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 6 mars 2007
1 mai 2006 à 18:18
En conclusion sa donne sa:

char nicks[10000];

char *splitnick(char *mot)
{
*nicks = '\0';
int x = 0;
int y = 0;
char autre[1];
while(mot[x] != '\0')
{
autre[y]=mot[x];
if (strcmp(autre,"\") == 0) { strncat(nicks, "\\\",2); x++; continue; }
strncat(nicks, autre,1);
x++;
}
return nicks;
}
0
logant83 Messages postés 90 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 6 mars 2007
1 mai 2006 à 18:24
luthor, oué sa fait dégeulasse mais sa marche plutot bien je trouve :xD
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
1 mai 2006 à 18:27
Mais le fait de trouver qu'une chose marche bien n'en fait pas pour autant une bonne chose.
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
1 mai 2006 à 18:28
Bah char* et tableau de caractère c'est tout pareil
Comme le disait yoyo
déclarer ta variable en static oui pourquoi pas mais rajouter un argument c'est beaucoup mieux

if(!Meilleur("Joky")) return ERREUR;<
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
1 mai 2006 à 18:31
Oui la variable en argument semble la solution la plus propre.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0
Rejoignez-nous