Probleme fonction en c

Résolu
mathlo -  
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
voila ma fonction bug,grace a des tests de printfs, je sais que c'est au moment de
Actu = chaine[compteur]; le 2eme...

bref voila le code, merci d'avance!



#include <stdio.h>
#include <stdlib.h>
int str_lg (int* chaine[], int compteur, char Actu);

char chaine[]="";
char Actu='NULL';
int compteur = 0; ref=0;
int i =0;


int main()
{
    printf("Entrez une chaine de mot\n");
    scanf("%s", chaine);
    i = str_lg (&chaine[compteur], compteur, Actu);
    printf("longueur = %d", i);

    return 0;
}


int str_lg (int* chaine[], int compteur, char Actu)
{
    while(ref==0)
    {
    Actu = chaine[compteur];
    printf("%c", Actu);
    while(Actu !='\0')
    {
        compteur++;
        printf("%d", compteur);
        Actu = chaine[compteur];
        printf("%c", Actu);
    }
    ref++;
    }
    compteur--;
    return compteur;
}



A voir également:

9 réponses

Utilisateur anonyme
 
Qu'as-tu essayé de faire ? Quel est le pc de ce chp ?
0
mathlo
 
je veux recréer par moi meme la fonction strlen;
pour ca je fais une boucle avec un compteur jusqua ce que le caractere soit "\0(celui de fin) et je renvoie la valeur...
mais ca bugge la ou jai dit dans le premier post :s
0
Utilisateur anonyme
 
Désolé je ne suis aps assez qualifié là :S
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,
char chaine[]="";
Cela revient à faire : char chaine[1]; chaine[0]='\0';
Autrement dit votre tableau ne contient qu'une case.
Ensuite, évite d'utiliser des variables globales. C'est une très mauvaise habitude.
Je te laisse corriger ces points-là. Reposte le code avec ces corrections si ça ne marche toujours pas.

Google is your friend
0

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

Posez votre question
mathlo
 
Bon, jai reussi sans le metre dans la fonction juste dans le main...

char chaine[]=""; char lettre = 0;
int compteur = 0; ref=0;
int i =0;


int main()
{
printf("Entrez une chaine de mot\n");
scanf("%s", chaine);
lettre=chaine[0];
while(lettre!='\0')
{
compteur++;
lettre = chaine[compteur];
}
printf("longueur = %d", compteur);

return 0;
}


mais j'aimerai vraiment créer la fonction... probleme de pointeur?
si quelqu'un pouvait m'aider...
0
mathlo
 
hi fiddy !
merci ok je m'y je vais tout recommencer je pense merci du conseil !

ps : au moment ou tu répondais, je regardais ton site, t'as l'air d'etre baleze :p c'est ton métier?
0
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
char chaine[]="";

...

scanf("%s", chaine);




il faut faire très attention, en C, avec les chaines de caractères.

ce sont donc des tableaux de caractères, terminés par le caractère '\0' (le caractere NULL)

ils ont une taille fixe.

lorsque tu crées ton tableau au départ, tu ne précises pas de taille entre les crochets.

Le compilateur va donc devoir trouver une taille tout seul, car il faut préciser une taille pour les tableaux en C.

Comme la chaines est une chaine vide ( char chaine[]="";)

le tableau sera mis à ... une taille de 1 caractère ! (juste une place pour le '\0' )

ensuite, lorsque tu voudras faire :


scanf("%s", chaine);


tu vas probablement écrire plus que 0 caractère donc....

tu va écrire après ton tableau !

Apparemment, par *chance* ça ne cause pas d'erreur tout de suite.

mais c'est bien là la principale source de problème qui arrivent après.

lorsque tu veux lire ce que tu as écris, il y a des erreurs car tu essayes de lire une zone mémoire qui n'est pas correctement allouée à ton programme, et donc divers problèmes bizarres arrivent.


li te faut déclarer ta chaine avec de l'espace dedans, pour pouvoir stoquer ce que tu écriras comme :

char chaine[200]="";


après il y a peut etre d'autres erreurs, j'ai pas tout lu.
0
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
arf, j'ai écrit puis envoyé plus tard, je suis un peu à la ramasse après toutes les réponses xD
0
mathlo
 
merci attente je rebosse dessus mais ca marche pas 30 sec
0
mathlo
 
Voila mon *nouveau* code un peu plus *propre* j'espere...


#include <stdio.h>
#include <stdlib.h>
int longueur (int* chaine[]);

char chaine[100];

int main()
{
int tot = 0;
printf("Entrez un mot :\n");
scanf("%s", chaine);
tot = longueur(&chaine);
printf("nbre caractere = %d", tot);
}

int longueur (int* chaine[])
{
char lettre = 0; int i = 0;
lettre = chaine[i];
while (lettre != '\n')
{
i++;
lettre = chaine[i];
printf("%d\n",lettre);
}
return i;
}

MAis ca me*de toujours dans ma boucle..
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Et la fonction chaine ? Allez hop dans le main aussi, aucune variable globale.

tot = longueur(&chaine);
Il ne faut pas mettre l'esperluette : tot=longueur(chaine);

int longueur (int* chaine[])
chaine est de type char*, donc : int longueur(char chaine[])

while (lettre != '\n')
Dans chaine, il n'y aura pas de '\n' (puisque tu as utilisé scanf qui ne le stocke pas). Il suffit que t'ailles jusqu'au '\0'. Donc while(lettre != '\0')

Et enfin dans ton mail, tu as oublié le return 0;

Tiens-nous au courant.
0
mathlo
 
bref, tu es un ouf :p

voila mon code...

#include <stdio.h>
#include <stdlib.h>
int longueur (char chaine[]);

int main()
{
int tot = 0; char chaine[100];
printf("Entrez un mot :\n");
scanf("%s", chaine);
tot = longueur(chaine);
printf("nbre caractere = %d", tot);
return 0;
}

int longueur (char chaine[])
{
char lettre = 0; int i = 0;
lettre = chaine[i];
while (lettre != '\0')
{
lettre = chaine[i];
i++;
}
i--;
return i;
}

merci beaucoup, tu n'as pas repondu a ma question d'avant, c'est ton métier, ou tu fais ca par "passion"?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Beh, ton code doit marcher là non ? Après, il ne faut pas que tu mettes d'espace dans ta chaîne de caractère car ton scanf ne prendra que le premier mot.

Sinon pour répondre à ta question, rien à voir avec mon métier...
0
mathlo
 
la ca marche en effet ;)

ok...


alors autre probleme si tu peux m'aider :p
j'attaque la fonction strcpy maintenant donc voila MA fonction



void str_copie (char chaine[], char copie[])
{
int longueur = str_long(chaine);
int i = 0;
while (i<longueur)
{
copie[i]=chaine[i];
i++;
}
printf("modele = %s\n", chaine);
printf("copie = %s\n", copie);
}


qui marche... MAIS juste apres le printf de copie il maffiche 3 caractere bizzarres, comme un ? inversé... idée?
0
mathlo
 
jai trouvé tout seul en fait merci quand meme
(il faut mettre longueur + 1 pour qu'il copie aussi le \n)... ;)
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Est-ce que copie a été initialisé comme : char copie[200] (comme tu as fait pour char chaine[200]) ?
Sinon, tu as oublié de mettre copie[i]='\0'; juste avant le printf("modele=...");
Le '\0' doit terminer la chaîne.
0
mathlo
 
merci encore
0