Probleme fonction en c
Résolu
mathlo
-
Pacorabanix Messages postés 3248 Date d'inscription Statut Membre Dernière intervention -
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!
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:
- Probleme fonction en c
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
9 réponses
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
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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...
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...
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?
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?
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.
...
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.
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..
#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..
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.
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.
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"?
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"?
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?
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?