Probleme fonction en c
Résolu/Fermé
mathlo
-
6 mars 2012 à 21:16
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 6 mars 2012 à 23:47
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 6 mars 2012 à 23:47
A voir également:
- Probleme fonction en c
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Fonction somme excel - Guide
- Snapchat ils m'ont ajouté par la fonction recherche - Forum Snapchat
- Comment colorer une cellule excel en fonction du contenu d'une autre cellule ✓ - Forum Excel
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
Modifié par fiddy le 6/03/2012 à 21:36
Modifié par fiddy le 6/03/2012 à 21:36
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?
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
6 mars 2012 à 21:52
6 mars 2012 à 21:52
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.
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
6 mars 2012 à 21:53
6 mars 2012 à 21:53
arf, j'ai écrit puis envoyé plus tard, je suis un peu à la ramasse après toutes les réponses xD
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..
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
6 mars 2012 à 22:12
6 mars 2012 à 22:12
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"?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
Modifié par fiddy le 6/03/2012 à 22:43
Modifié par fiddy le 6/03/2012 à 22:43
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...
Sinon pour répondre à ta question, rien à voir avec mon métier...
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?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
6 mars 2012 à 22:38
6 mars 2012 à 22:38
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.
Sinon, tu as oublié de mettre copie[i]='\0'; juste avant le printf("modele=...");
Le '\0' doit terminer la chaîne.